拥有CMake include_directories SYSTEM dirs前缀与equals字符(=)

时间:2014-06-18 14:41:45

标签: gcc cmake

有没有办法让CMake include_directories包含系统目录前缀和等号(=)字符?这样我就可以为相关的dirs添加gcc前缀,并带有-isysroot标志用于交叉编译。

当我尝试使用equals(=)前缀包含路径时,假设相对路径和带有当前源路径的前缀:

include_directories(AFTER SYSTEM "=/usr/include")

结果:

-isystem /root/opencv-2-4-9/opencv/modules/highgui/=/usr/include/

我的期望是:

-isystem=/usr/include/

2 个答案:

答案 0 :(得分:3)

我检查了CMake的源代码(2.8.12.2和3.0.0);似乎CMake添加了当前源目录所有不以' /'开头的路径。在非Windows系统中。

唯一的异常是生成器表达式。如果path以" $<"开头,那么它会跳过路径的前缀,并且在评估生成器表达式后不会为它添加前缀。因此

include_directories(AFTER SYSTEM "$<1:=>/usr/include")

产生

-isystem =/usr/include/

这似乎至少适用于CMake 3.0.0。当然,你应该为gcc设置CMAKE_SYSROOT前缀为正确的路径。

set(CMAKE_SYSROOT /usr/arm-linux-gnueabi)

答案 1 :(得分:0)

在一个命令中将它们组合在一起:

set_target_properties(<targetname> PROPERTIES COMPILE_FLAGS "-isystem=/usr/include/")