cmake - CMake没有获取链接库的INTERFACE_INCLUDE_DIRECTORIES

标签 cmake

我的cmake文件中有这个

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}")

哪个输出
Moggle interface includes: "/home/nick/code/onegame/motor/moggle/include"
Motor includes:" "

怎么会这样?当Moggle链接时,也应根据此
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

...拿起INTERFACE_INCLUDE_DIRECTORIES并将它们添加到马达中,那么我在做什么错呢?
  • CMake版本:cmake版本2.8.12.2
  • 操作系统:Arch Linux
  • 最佳答案

    CMake在“配置时间”进行一些处理,并在“生成时间”进行一些处理。
    message()在配置时执行,但是链接库仅在生成时稍后评估。因为您的包含目录依赖于链接的库,所以包含目录在生成时间之前不会得到完全解析。
    file(GENERATE)命令在生成时评估generator expression内容并将其写入文件,因此,类似这样的操作会将最终的include目录写入include.txt:

    file(GENERATE 
        OUTPUT "includes.txt" 
        CONTENT "$<TARGET_PROPERTY:motor,INCLUDE_DIRECTORIES>\n"
    )
    

    如果您要调试,请尝试将CMAKE_VERBOSE_MAKEFILE设置为1以查看编译器命令行或尝试设置
    set(CMAKE_DEBUG_TARGET_PROPERTIES INCLUDE_DIRECTORIES)
    

    它将向您显示每个目标上每个包含目录的来源回溯。

    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

    关于cmake - CMake没有获取链接库的INTERFACE_INCLUDE_DIRECTORIES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24091287/

    相关文章:

    c++ - 带有 Boost 的 CMake 1.62.0 : "No Boost libraries were found"

    cmake - CMake 中的 CMAKE_SOURCE_DIR 和 PROJECT_SOURCE_DIR 是否相同?

    build - 有效值有限的CMake变量

    python - cmake 调用 python 脚本并验证

    c++ - 将一个CMakeLists文件分成多个项目

    cmake - CppUnit 测试总是通过 Ctest

    c++ - 如何在共享对象构建中包含子目录

    android - 在没有 Android Studio 的情况下为 Android 创建 (Cmake) C/C++ 库

    cmake 命令行选项

    c - 使用 CMake 将共享库与静态链接起来