makefileプロジェクトをCMakeに移行しています。makefileを初めて書き込んだ人は、インクルードファイルに特定の値を書き込むためのモジュールを作成しました。
config_in.hを含むメインのconfig.hファイルがあります。config.hファイルには次のようなものが含まれています。
#ifndef USE_FEATURE_A
#define USE_FEATURE_A 0
#endif
#ifndef USE_FEATURE_B
#define USE_FEATURE_B 0
#endif
with_feature_a
makefileには、config_in.hに書き込むような偽のターゲットがあります。
#define USE_FEATURE_A 1
このようにして誰かがタイプすることができます
make with_feature_a
make
適切なビルドを取得します。
このコードベースを使用して、CMakeを使用してこのようなものを複製したいと思います。ネット上で提案されたいくつかのアプローチを試しましたが、うまくいきませんでした。
set_target_properties(with_feature_a PROPERTIES COMPILE_DEFINITIONS
"WITH_FEATURE_A=1"
)
私が実行した場合、これは機能していません
make with_feature_a
with_feature_a
プリプロセッサのコマンドラインに表示されません。
file()
2番目の試みは、コンテンツを任意に設定してファイルを直接書き込むことですが、コマンドをターゲットに接続する方法がわかりませんでした。
これをCMakeLists.txtに配置しました
file(WRITE
local/config_in.h
"#define WITH_FEATURE_A 1"
)
しかし、これは毎回実行されるわけではなく、単一のターゲットに設定する方法がわかりません。
どんな助けでも大歓迎です。これらすべてを読んでいただきありがとうございます。長い話でごめんなさい:)
アップデート
ここで提供されるソリューションは、ソリューションへの道の大きな強化です。問題は、再帰的定義を許可しないことです。例を示します。
私が配置したCMakeLists.txtに:
if (WITH_FEATURE_A)
MESSAGE(STATUS "WITH_FEATURE_A")
add_definitions(-DUSE_FEATURE_A=1)
add_definitions(-DWITH_FEABURE_B=1)
endif()
if (WITH_FEABURE_B)
MESSAGE(STATUS "WITH_FEATURE_B")
add_definitions(-DUSE_FEATURE_D=1)
endif()
if (WITH_FEABURE_C)
MESSAGE(STATUS "WITH_FEATURE_C")
add_definitions(-DUSE_FEATURE_D=1)
endif()
if (WITH_FEABURE_D)
MESSAGE(STATUS "WITH_FEATURE_D")
endif()
この場合、-DWITH_FEATURE_A = 1でcmakeを実行すると、出力に表示されます。
WITH_FEATURE_A
WITH_FEATURE_B
WITH_FEATURE_D
実際、このコードは
WITH_FEATURE_A