2012-07-31 50 views
1

有没有办法在一个CMakeLists.txt文件中为相同的类创建单独的可执行文件,但是出于其他目的?这有点像DEBUG/RELEASE switch,但我需要在源代码级别做出决定。使用单个CMakeLists.txt生成多模式可执行文件

伪的CMakeLists.txt:

SET_INTENTION(app1 1) 
ADD_EXECUTABLE(app1 main.cxx) 
SET_INTENTION(app2 2) 
ADD_EXECUTABLE(app2 main.cxx) 

伪代码main.cxx:

if (intention == 1) 
    //do something different to intention == 2 

我试着在源ADD_DEFINITIONS作为预处理器定义和#ifdef,但CMake的似乎解释整个文件并得到了所有的定义,无论在什么位置添加定义。将ADD_EXECUTABLES()拆分成两个CMakeLists.txt(在子文件夹中)并不是非常简单,并且在使用QT4_WRAP_CPPQT4_WRAP_UI时会导致问题。我很欣赏任何想法/解决方法。

回答

2

COMPILE_DEFINTIONS property看起来很有希望:

add_executable(app1 main1.cxx) 
get_target_property(APP1_COMPILE_DEFS app1 COMPILE_DEFINITIONS) 
set_target_property(app1 PROPERTIES COMPILE_DEFINITIONS "${APP1_COMPILE_DEFS};INTENTION=1") 

add_executable(app2 main2.cxx) 
get_target_property(APP2_COMPILE_DEFS app2 COMPILE_DEFINITIONS) 
set_target_property(app2 PROPERTIES COMPILE_DEFINITIONS "${APP2_COMPILE_DEFS};INTENTION=2") 

然后在源文件中使用预处理#if INTENTION=1等等。如果你不使用最近的CMake,你可能需要混淆COMPILE_FLAGS属性。

相关问题