2011-10-21 327 views
19

我想将相同的.cpp源文件编译为两个不同的目标可执行文件,并使用cmake。一个将有一些仪器代码,另一个不会。这样我可以比较仪器的开销。使用CMAKE编译具有不同标志的相同文件

我有用#ifdefs分开的工具代码,所以我想用-D标志定义一个值。我看到这是可能的

add_definitions(-DINSTRUMENT) 

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

回答

21

您可以设定目标之一的COMPILE_DEFINITIONS属性,使其具有特定目标的定义:

set_target_properties (instrumented_target PROPERTIES COMPILE_DEFINITIONS "INSTRUMENT") 

更新:

从CMake的2.8.11开始,你也可以使用target_compile_definitions为相同的目的。

+0

谢谢你的作品。 –

+5

该属性也可以在每个源文件的基础上,使用“set_property(SOURCE source_file_name PROPERTY COMPILE_DEFINITIONS ...)” – DLRdave

+1

@DLRdave,我认为应该注意的是,使用'set_target_properties()'不会覆盖定义已经通过前面定义的'add_definitions()'添加。 (我一直很担心这个,直到我运行'make VERBOSE = 1') – mpontillo

相关问题