cmake set_target_properties INCLUDE_DIRECTORIES 在 Linux 上被忽略

use*_*069 6 linux cmake

我有很多目标,我试图在每个目标的基础上设置包含目录。

set_target_properties (foo PROPERTIES INCLUDE_DIRECTORIES ${CMAKE_Fortran_MODULE_DIRECTORY}/bar)
Run Code Online (Sandbox Code Playgroud)

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

... -J../build/modules/foo -I../build/modules/bar
Run Code Online (Sandbox Code Playgroud)

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

... -J../build/modules/foo ...
Run Code Online (Sandbox Code Playgroud)

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

Com*_*sMS 5

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

变更日志

为每个目标的 INCLUDE_DIRECTORIES 调用 ExpandVariablesInString

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

使 INCLUDE_DIRECTORIES 目标属性保持最新。

提取并使用 INCLUDE_DIRECTORIES 目标属性。

特别令人感兴趣的是更改文档的提交。据此,INCLUDE_DIRECTORIES2.8.7 中的属性是目录的只读属性。目标属性在该版本中根本不存在。

由于 CMake 允许设置任意目标属性,因此您的脚本仍然可以正常运行,不会出现错误,但 CMake 会忽略该属性。

这是另一个很好的例子,说明为什么您应该始终注意指定正确的最低所需版本