【发布时间】:2011-10-21 00:52:58
【问题描述】:
我想将同一个 .cpp 源文件编译成两个不同的目标可执行文件,我正在使用 cmake。一个会有一些仪器代码,另一个没有。这样我就可以比较仪器的开销。
我用#ifdefs 分隔了检测代码,所以我想使用-D 标志定义一个值。我看到这是可能的
add_definitions(-DINSTRUMENT)
但看起来这适用于该目录中创建的所有可执行文件。我想知道是否有一种好方法可以仅为特定的可执行目标设置定义。
【问题讨论】:
我想将同一个 .cpp 源文件编译成两个不同的目标可执行文件,我正在使用 cmake。一个会有一些仪器代码,另一个没有。这样我就可以比较仪器的开销。
我用#ifdefs 分隔了检测代码,所以我想使用-D 标志定义一个值。我看到这是可能的
add_definitions(-DINSTRUMENT)
但看起来这适用于该目录中创建的所有可执行文件。我想知道是否有一种好方法可以仅为特定的可执行目标设置定义。
【问题讨论】:
您可以将目标之一的COMPILE_DEFINITIONS 属性设置为具有特定于目标的定义:
set_target_properties (instrumented_target PROPERTIES COMPILE_DEFINITIONS "INSTRUMENT")
更新:
从 CMake 2.8.11 开始,您还可以将target_compile_definitions 用于相同目的。
【讨论】:
set_target_properties() 不会覆盖前面定义的add_definitions() 已经添加的定义。 (我一直担心这个,直到我跑了make VERBOSE=1)