1

同じクラスの 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 はファイル全体を解釈し、定義が追加された位置に関係なく、すべての定義を取得しているようです。ADD_EXECUTABLES()を (サブフォルダーで) 2 つに分割するのCMakeLists.txtは簡単ではなく、 と を使用するときに問題が発生しQT4_WRAP_CPPますQT4_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 に答える