同时使用-isystem和-I作为CMake的相同路径

时间:2018-04-01 22:08:22

标签: c++11 cmake dynamic-library

有没有办法在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

1 个答案:

答案 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>")

CMake Generator Expressions