使用单个CMakeLists.txt生成多模式可执行文件

时间:2012-07-31 16:36:05

标签: qt cmake

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

伪的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时会导致问题。我感谢任何想法/解决方法。

1 个答案:

答案 0 :(得分: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属性。