【问题标题】:cmake set_target_properties INCLUDE_DIRECTORIES getting ignored on linuxcmake set_target_properties INCLUDE_DIRECTORIES 在 linux 上被忽略
【发布时间】:2013-06-11 16:17:44
【问题描述】:

我有一堆目标,我正在尝试基于每个目标设置包含目录。

set_target_properties (foo PROPERTIES INCLUDE_DIRECTORIES ${CMAKE_Fortran_MODULE_DIRECTORY}/bar)

当我在 Mac OS X 上构建 (make VERBOSE=1) 时,我得到了

... -J../build/modules/foo -I../build/modules/bar

当我在 Linux 上做同样的事情时,我得到了

... -J../build/modules/foo ...

我能看到的唯一区别是,在 mac 上我使用的是 cmake 2.8.8,而在 linux 上我使用的是 2.8.7。 2.8.8之前的版本不支持吗?

【问题讨论】:

    标签: linux cmake


    【解决方案1】:

    这种行为确实是从 2.8.7 到 2.8.8 的版本变化。

    来自changelog

    为每个目标的 INCLUDE_DIRECTORIES 调用 ExpandVariablesInString

    更新有关 INCLUDE_DIRECTORIES 的文档。 [...]

    使 INCLUDE_DIRECTORIES 目标属性保持最新。

    提取并使用 INCLUDE_DIRECTORIES 目标属性。

    特别感兴趣的是commit changing the documentation。据此,INCLUDE_DIRECTORIES 2.8.7 中的属性是目录上的只读属性。该版本中根本不存在目标属性。

    由于 CMake 允许设置任意目标属性,因此您的脚本仍然可以正常工作,但 CMake 会简单地忽略该属性。

    这是另一个很好的例子,为什么您应该始终关注specifying the correct minimum required version

    【讨论】:

    • 可以检查cmake版本吗?像if (CMAKE_VERSION less than 2.8.8) 这样的东西因为我坚持使用 2.8,因为我们支持的最小值可以支持。
    猜你喜欢
    • 2014-02-18
    • 2016-05-22
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多