【问题标题】:Use generator expression to set build type specific flags使用生成器表达式设置特定于构建类型的标志
【发布时间】:2016-01-13 05:39:26
【问题描述】:

我想根据我当前在 cmake 中的构建配置设置一些特定的编译标志。我认为生成器表达式可以让我这样做,但它们似乎没有按我预期的方式工作。

我正在使用以下命令为我的主要目标设置编译选项。无论 CMAKE_BUILD_TYPE 设置为什么,这两个表达式似乎总是评估为 true,因为 --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 生成器。

【问题讨论】:

  • 在 Linux 下使用 makefile 生成器 (CMake 4.1) 为我工作。您使用什么目标(操作系统、生成器)?

标签: cmake


【解决方案1】:

看起来第二面旗帜是从某个地方捡来的,恰好是在正确的位置订购的,以给我上述印象。

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

编辑: 不需要的优化标志来自对链接到我的主要目标的几个库的 target_compile_options 调用。我将范围选项设置为 PUBLIC,这意味着选项填充 INTERFACE_COMPILE_OPTIONS。我将范围更改为 PRIVATE,它摆脱了不需要的标志。

【讨论】:

  • 感谢您跟进您的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
相关资源
最近更新 更多