有没有办法让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/
答案 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/")