我想根据cmake中的当前构建配置设置一些特定的编译标志。我认为生成器表达式可以让我这样做,但它们看起来并不像我预期的那样工作。
我使用以下命令将编译选项设置为我的主目标。两个表达式似乎总是评估为true,因为无论CMAKE_BUILD_TYPE设置为什么,都会将--debug和-Oh传递给编译器。
target_compile_options(${PROJECT_NAME}
PUBLIC
${COMMON_COMPILER_FLAGS}
$<$<CONFIG:Debug>:--debug>
$<$<CONFIG:Release>:-Oh>
)
我在Windows上使用cmake 3.4.1,并且我正在使用IAR工具链进行交叉编译。更具体地说,我在Cygwin中从bash shell执行cmake,但它仍然是Windows可执行文件。我正在使用Unix Makefile生成器。
答案 0 :(得分:1)
看起来第二个标志从某个地方被拾起,恰好在正确的位置订购,给我上面的印象。
当我确定它时,我可以用更新的解释更新,但生成器表达式似乎一直在工作。我为这两个插入了一些键盘粉碎,很明显只有一个进入命令行。
修改强> 不需要的优化标志来自于链接到我的主目标的几个库上的target_compile_options调用。我将范围选项设置为PUBLIC,这意味着选项填充INTERFACE_COMPILE_OPTIONS。我将范围更改为PRIVATE,并删除了不需要的标记。