使用generator表达式设置构建类型特定标志

时间:2016-01-13 05:39:27

标签: cmake

我想根据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生成器。

1 个答案:

答案 0 :(得分:1)

看起来第二个标志从某个地方被拾起,恰好在正确的位置订购,给我上面的印象。

当我确定它时,我可以用更新的解释更新,但生成器表达式似乎一直在工作。我为这两个插入了一些键盘粉碎,很明显只有一个进入命令行。

修改 不需要的优化标志来自于链接到我的主目标的几个库上的target_compile_options调用。我将范围选项设置为PUBLIC,这意味着选项填充INTERFACE_COMPILE_OPTIONS。我将范围更改为PRIVATE,并删除了不需要的标记。