How do I use message() in CMake? - cmake

I have a CMakeLists with this code:
macro(set_up_additional_targets)
add_custom_target(generate_things
message("Generating stuff")
COMMAND python3 generator.py --outfile ${CMAKE_CURRENT_SOURCE_DIR}/sources/stuff
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/tools/generator/
)
endmacro(set_up_additional_targets)
I get this error:
/bin/sh: -c: line 0: syntax error near unexpected token `Generating\ stuff'
/bin/sh: -c: line 0: `cd /home/me/workspaces/foo/tools/generator && message ( Generating\ stuff )'
make[3]: *** [CMakeFiles/generate_things.dir/build.make:70: CMakeFiles/generate_things] Error 1
make[2]: *** [CMakeFiles/Makefile2:699: CMakeFiles/generate_things.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:706: CMakeFiles/generate_things.dir/rule] Error 2
make: *** [Makefile:439: generate_things] Error 2
I changed from COMMAND echo "Generating stuff" to message("Generating stuff") to become more platform independent, but it obviously doesn't work. It is not clear from the CMake manual how this could be wrong, though, as usual with CMake, there are no examples in the manual.
What is my mistake?

COMMENT should serve your purpose here, see.
MESSAGE is evaluated at CMake parsing step, see.

Related

Dependency for add_jar cmake

I am actually generating java source files dynamically through code generators. I want to create jar file containing the java files created through this code generator.
add_custom_target(lang ALL)
add_custom_command(
TARGET lang
COMMAND ${Protobuf_PROTOC_EXECUTABLE} ${CMD_PRG_LNG} --proto_path=${PROTO_FILES} ${COMMONS}/*.proto")
If I run my cmake without add_jar command, it successfully run and generate java files in the respective folders. But, if I add add_jar
add_jar(${JAR_NAME} ${JAVA_SOURCES})
The above instruction fails with the following error message.
Scanning dependencies of target ProtoJava
make[2]: *** No rule to make target '../protoJava/Data.java', needed by 'CMakeFiles/ProtoJava.dir/java_compiled_ProtoJava'. Stop.
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/ProtoJava.dir/all' failed
make[1]: *** [CMakeFiles/ProtoJava.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
How to get the jar file created? I tried putting add_jar inside add_custom_command under the same target as java file creation.
add_custom_command(
TARGET lang_java
COMMAND add_jar(${JAR_NAME} ${JAVA_SOURCES}))
but it errors out with message
/bin/sh: 1: Syntax error: word unexpected (expecting ")")
CMakeFiles/lang_java.dir/build.make:57: recipe for target 'lang_java' failed
make[2]: *** [lang_java] Error 2
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/lang_java.dir/all' failed
make[1]: *** [CMakeFiles/lang_java.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
How to fix this one?

error build all ros packages in this repo the error occur in catkin_make step

I followed instruction by Michael Huang.
My error message reads:
In file included from /home/evadro/quadevac_sim_ws/catkin_ws/src/menge_gazebo/menge_congregate/include/MengeCong.h:10:0,
from /home/evadro/quadevac_sim_ws/catkin_ws/src/menge_gazebo/menge_congregate/src/MengeCong.cpp:8:
/home/evadro/quadevac_sim_ws/catkin_ws/src/menge_gazebo/menge_congregate/../menge_common/include/MengePlugin.h:13:44: fatal error: gazebo/physics/InstancedActor.hh: No such file or directory
compilation terminated.
menge_gazebo/menge_congregate/CMakeFiles/menge_congregate.dir/build.make:62: recipe for target 'menge_gazebo/menge_congregate/CMakeFiles/menge_congregate.dir/src/MengeCong.cpp.o' failed
make[2]: * [menge_gazebo/menge_congregate/CMakeFiles/menge_congregate.dir/src/MengeCong.cpp.o] Error 1
CMakeFiles/Makefile2:4099: recipe for target 'menge_gazebo/menge_congregate/CMakeFiles/menge_congregate.dir/all' failed
make[1]: * [menge_gazebo/menge_congregate/CMakeFiles/menge_congregate.dir/all]
The 2nd error is:
make[1]: *** Waiting for unfinished jobs....
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j24 -l24" failed
Your Error is gazebo/physics/InstancedActor.hh No such file or directory.
this header is not on standard version of Gazebo.
Make Sure you Compiled Gazebo Repo mentioned in External Depenencies Here with No errors. Then Double checks paths so compiler can find the missing headers.

ld unrecognised emulation mode aarch64linux

When running make in CMake, I only get an error that says /usr/bin/ld unrecognised emulation mode aarch64linux.
Im trying to build DualBootPatcher app for Android, this is the error:
/usr/bin/ld: unrecognised emulation mode: aarch64linux
Supported emulations: elf_x86_64 elf32_x86_64 elf_i386 elf_iamcu elf_l1om elf_k1om i386pep i386pe
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[5]: *** [misc/CMakeFiles/fsck-wrapper.dir/build.make:76: misc/fsck-wrapper] Error 1
make[4]: *** [CMakeFiles/Makefile2:1786: misc/CMakeFiles/fsck-wrapper.dir/all] Error 2
make[3]: *** [Makefile:163: all] Error 2
make[2]: *** [android/CMakeFiles/android-system_arm64-v8a.dir/build.make:111: android/android-system_arm64-v8a-prefix/src/android-system_arm64-v8a-stamp/android-system_arm64-v8a-build] Error 2
make[1]: *** [CMakeFiles/Makefile2:1868: android/CMakeFiles/android-system_arm64-v8a.dir/all] Error 2
make: *** [Makefile:163: all] Error 2>
Im running latest Cmake and binutils. Also tried reinstalling binutils.
Im NOT a developers, so it would be nice if you could explain it^^
Does anyone has a solution?
The issue is clear from the fact that the output is coming from /usr/bin/ld. This is the system ld, rather than the ld included with the NDK. You should investigate why this ld is being executed instead, for example via strace.
For me it turned out to be a file permissions issue - the NDK zip file had extracted without execute permissions, so the toolchain binaries were silently ignored. A few chmod +x later and all was well.

Mono: "mdoc: There is an error in XML document"

I modified a few lines of C# code in the source of Mono, and now it does not build anymore:
make[7]: Leaving directory `/home/nico/src/mono-roman/mono-2.10.8.1/mcs/mcs'
make[7]: Entering directory `/home/nico/src/mono-roman/mono-2.10.8.1/mcs/docs'
/usr/bin/make all-local
make[8]: Entering directory `/home/nico/src/mono-roman/mono-2.10.8.1/mcs/docs'
MDOC [net_4_0] cs-errors.tree
mdoc: There is an error in XML document.
See `mdoc help' for more information.
make[8]: *** [cs-errors.tree] Error 1
make[8]: Leaving directory `/home/nico/src/mono-roman/mono-2.10.8.1/mcs/docs'
make[7]: *** [do-all] Error 2
make[7]: Leaving directory `/home/nico/src/mono-roman/mono-2.10.8.1/mcs/docs'
make[6]: *** [all-recursive] Error 1
make[6]: Leaving directory `/home/nico/src/mono-roman/mono-2.10.8.1/mcs'
make[5]: *** [profile-do--net_4_0--all] Error 2
make[5]: Leaving directory `/home/nico/src/mono-roman/mono-2.10.8.1/mcs'
make[4]: *** [profiles-do--all] Error 2
make[4]: Leaving directory `/home/nico/src/mono-roman/mono-2.10.8.1/mcs'
make[3]: *** [all-local] Error 2
make[3]: Leaving directory `/home/nico/src/mono-roman/mono-2.10.8.1/runtime'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/nico/src/mono-roman/mono-2.10.8.1'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/nico/src/mono-roman/mono-2.10.8.1'
make: *** [build-stamp] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
Build command 'cd mono-2.10.8.1 && dpkg-buildpackage -b -uc' failed.
E: Child process failed
The problem is mdoc: There is an error in XML document. MDOC is a kind of Javadoc for Mono. I am surprised that changing a few benign C# lines would make MDOC fail?
Any tip on what is going on here? I also have no idea what XML document this is about.
The initial analysis I posted in the comments seems to be right. MDOC is loading the cs-errors.config, and using the newly built runtime. The changes you have made produce the following exception while loading said file:
System.InvalidOperationException: Element 'FilesPath' has wrong order in sequence (expected - -1, actual - 0
This was added by your patch. I am guessing you might want to check readBySoapOrder as well, such as:
if (readBySoapOrder && info.ExplicitOrder != ind)
throw new InvalidOperationException(string.Format("Element '{0}' has wrong order in sequence (expected - {1}, actual - {2}", Reader.LocalName, info.ExplicitOrder, ind));
With this little change MDOC is happy and compilation succeeds, but I have no idea if it is the correct behavior.
Try "make clean" before trying "make" again.

Compile Objective-C with GNUstep

I'm a newbie in Objective-C. I'm trying to compile Objective-C with GNUstep but it's giving errors. I tried to both compile on command line (gcc and makefile).
No such file or directory /
excepted '>' before 'GSPredicateBlock'
…
I used the command line
gcc gnustep-config --objc-flags -o hello hello.m -I /GNUstep/System/Library/Headers -L /GNUstep/System/Library/Libraries -lobjc -lgnustep-base -fconstant-string-class=NSConstantString -enable-auto-import
My attempt at using a makefile:
Making all for tool Hello...
Compiling file hello.m ...
hello.m:1:71 fatal error: ../../GNUstep/System/Library/Headers/Foundation/Found ation.h: No such file or directory
compilation terminated.
make[3]: *** [obj/Hello.obj/hello.m.o] Error 1
make[2]: *** [internal-tool-all_] Error 2
make[1]: *** [Hello.all.tool.variables] Error 2
make: *** [internal-all] Error 2
I've searched Google, but I can't find anything that helps. I installed gnustep-msys-system-0.28.0-setup, gnustep-core-0.28.0-setup and gnustep-devel-1.3.0-setup on Windows 7.
I don't know if this is a red herring but I see there's a space in a place where it should not be:
Foundation/Found ation.h
it should read:
#import <Foundation/Foundation.h>
(without the space) in your source code file
Obviously this is what the compiler complains about here:
hello.m:1:71 fatal error: ../../GNUstep/System/Library/Headers/Foundation/Found ation.h: No such file or directory
remove that space in your source code file's import directive and try again.