I have this in my cmake-file
get_target_property(moggle_interface_includes moggle INTERFACE_INCLUDE_DIRECTORIES)
message("Moggle interface includes: ${moggle_interface_includes}")
target_link_libraries(motor
moggle
)
get_target_property(motor_includes motor INCLUDE_DIRECTORIES)
message("MOTOR includes ${motor_includes}")
Which outputs this
Moggle interface includes: "/home/nick/code/onegame/motor/moggle/include"
Motor includes:" "
How can this be? When moggle is linked, it should also, according to this
CMake will also propagate "usage requirements" from linked library targets. Usage
requirements affect compilation of sources in the <target>. They are specified by
properties defined on linked targets. During generation of the build system, CMake
integrates usage requirement property values with the corresponding build properties for
<target>:
INTERFACE_COMPILE_DEFINITONS: Appends to COMPILE_DEFINITONS
INTERFACE_INCLUDE_DIRECTORIES: Appends to INCLUDE_DIRECTORIES
... pick up the INTERFACE_INCLUDE_DIRECTORIES and add them to motor's, so what am I doing wrong?
CMake does some processing at 'configure time' and some processing at 'generate time'.
The message()
is executed at configure time, but linked libraries are only evaluated later at generate time. Because your include directories depend on the linked libraries, the include directories are not fully resolved until generate time.
The file(GENERATE)
command evaluates generator expression
content at generate time and writes it to a file, so something like this will write the final include directories to includes.txt:
file(GENERATE
OUTPUT "includes.txt"
CONTENT "$<TARGET_PROPERTY:motor,INCLUDE_DIRECTORIES>\n"
)
If your purpose is debugging, then try setting CMAKE_VERBOSE_MAKEFILE to 1
to see the compiler command lines or try setting
set(CMAKE_DEBUG_TARGET_PROPERTIES INCLUDE_DIRECTORIES)
and it will show you a backtrace for where each of the include directories on each target comes from.
http://www.cmake.org/cmake/help/v3.0/manual/cmake-generator-expressions.7.html
http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html
http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_DEBUG_TARGET_PROPERTIES.html
http://www.cmake.org/cmake/help/git-master/command/file.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With