我有一个CMakeLists.txt,它构建了许多目标。拨打一个foo
和一个bar
目前foo
和bar
都分享了ccmake
配置的一些设置
CMAKE_CXX_FLAGS = -W -Wall
CMAKE_CXX_FLAGS_DEBUG = -g -pg
等
我需要将-fPIC
添加到foo
,但不是bar
。根据{{3}},我想使用this answer
target_compile_options(foo PUBLIC "$<$<CONFIG:DEBUG>:${MY_DEBUG_OPTIONS}>")
target_compile_options(foo PUBLIC "$<$<CONFIG:RELEASE>:${MY_RELEASE_OPTIONS}>")
请注意,target_compile_options 添加 [sic] 选项
这听起来像我需要的但是这种语法是什么意思?
"$<$<CONFIG:DEBUG>:${MY_DEBUG_OPTIONS}>"
为了澄清,我想在编译-fPIC
时添加foo
作为附加标记,而不是在编译bar
请解释$<$<
商家,并具体说明如何将-fPIC
添加为foo
的标记。
答案 0 :(得分:1)
看起来$<$<
属于生成器表达式类别:https://cmake.org/cmake/help/v3.0/manual/cmake-generator-expressions.7.html#manual:cmake-generator-expressions(7),
正好进入
逻辑表达式
所以在你的情况下,
"$<$<CONFIG:DEBUG>:${MY_DEBUG_OPTIONS}>"
在使用DEBUG配置时扩展为MY_DEBUG_OPTIONS,否则扩展为空。
因此,在您的情况下,您应该将-fPIC
添加到MY_DEBUG_OPTIONS
。
为了更精确一点:
$<CONFIG:DEBUG>
根据天气CONFIG是否为DEBUG,分别评估为1或0。 然后你会有:
$<0:${MY_DEBUG_OPTIONS}>
或
$<1:${MY_DEBUG_OPTIONS}>
上述两个表达式将按以下方式评估:
$<0:${MY_DEBUG_OPTIONS}>
将评估为
空字符串(忽略$ {MY_DEBUG_OPTIONS})
而$<1:${MY_DEBUG_OPTIONS}>
将评估为
内容$ {MY_DEBUG_OPTIONS}
正如文件所述。
在最后一种情况下,-fPIC
将被添加到CMAKE_CXX_FLAGS或CMAKE_CXX_FLAGS_DEBUG之一。