有没有办法在一个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_CPP
和QT4_WRAP_UI
时会导致问题。我感谢任何想法/解决方法。
答案 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
属性。