有没有办法在CMake中的同一路径上同时使用-isystem和-I?我目前正在做类似以下的事情:
add_library(lib SHARED libSource.cpp)
target_include_directories(lib PUBLIC pathA)
target_include_directories(lib SYSTEM PUBLIC pathA)
当我运行make VERBOSE=1
时,lib
的构建标记只包含-isystem pathA
,我需要-isystem pathA
和-IpathA
。
答案 0 :(得分:0)
CMake允许您使用
generator expressions
,例如:
输出表达式:
这些表达式在某些情况下会根据输入生成输出。这些表达式可以与其他表达式结合使用以进行信息或逻辑比较:
-I$<JOIN:$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>, -I>
在INCLUDE_DIRECTORIES
目标属性中生成一个条目字符串,每个条目前面都有-I
。请注意,在这种情况下更完整的使用需要首先检查INCLUDE_DIRECTORIES
属性是否为非空:
$<$<BOOL:${prop}>:-I$<JOIN:${prop}, -I>>
${prop}
指的是辅助变量:
set(prop "$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>")