使用 CMAKE 编译具有不同标志的相同文件

Posted

技术标签:

【中文标题】使用 CMAKE 编译具有不同标志的相同文件【英文标题】:Compile same file with different flags using CMAKE 【发布时间】:2011-10-21 00:52:58 【问题描述】:

我想将同一个 .cpp 源文件编译成两个不同的目标可执行文件,我正在使用 cmake。一个会有一些仪器代码,另一个没有。这样我就可以比较仪器的开销。

我用#ifdefs 分隔了检测代码,所以我想使用-D 标志定义一个值。我看到这是可能的

add_definitions(-DINSTRUMENT)

但看起来这适用于该目录中创建的所有可执行文件。我想知道是否有一种好方法可以仅为特定的可执行目标设置定义。

【问题讨论】:

【参考方案1】:

您可以将目标之一的COMPILE_DEFINITIONS 属性设置为具有特定于目标的定义:

set_target_properties (instrumented_target PROPERTIES COMPILE_DEFINITIONS "INSTRUMENT")

更新:

从 CMake 2.8.11 开始,您还可以将target_compile_definitions 用于相同目的。

【讨论】:

该属性也可用于每个源文件,使用“set_property(SOURCE source_file_name PROPERTY COMPILE_DEFINITIONS ...)” @DLRdave,我认为应该注意的是,使用set_target_properties() 不会覆盖前面定义的add_definitions() 已经添加的定义。 (我一直担心这个,直到我跑了make VERBOSE=1

以上是关于使用 CMAKE 编译具有不同标志的相同文件的主要内容,如果未能解决你的问题,请参考以下文章

CMake 编译标志

CMake Fortran 编译器相关标志

CMake:配置期间不同的编译器标志?

使用 CMake 编译 openCV:设置架构和优化标志

在 CMake 项目中动态更改编译器标志

源文件具有不同编译器标志的 Makefile