1

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

伪 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 似乎解释了整个文件并获得了所有定义,无论在什么位置添加定义。将inADD_EXECUTABLES()分成两个(在子文件夹中)并不是很直接,并且在使用andCMakeLists.txt时会导致问题。我很欣赏任何想法/解决方法。QT4_WRAP_CPPQT4_WRAP_UI

4

1 回答 1

2

COMPILE_DEFINTIONS物业看起来很有希望:

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属性。

于 2012-08-01T07:32:32.953 回答