私は現在cmake
、私のプロジェクトに使用しようとしています。その構造は非常に簡単で、メインフォルダーと「ライブラリ」サブフォルダーで構成され、ヘッダーとソースファイルも含まれています。
./ sourceA.cpp ...
./lib/ sourceB.cpp headerB.cpp ...
次のように、プリプロセッサがいくつかのプレースホルダーを置き換えるために使用する必要があるいくつかの定数をユーザーに定義させたいと思います。char data[DIMENSION]
メインディレクトリで、次のCMakeLists.txtを使用して値を要求し、設定します。
...
set(DATASET_DIMENSION "4" CACHE STRING "The dimensions of the dataset used.")
set_property(
GLOBAL
PROPERTY COMPILE_DEFINITIONS DIMENSION=${DATASET_DIMENSION}
APPEND
)
add_subdirectory(lib)
...
サブディレクトリでは、CMakeLists.txtは主にソースファイルを追加し、を呼び出しますadd_library(lib ${lib_SOURCES})
。
問題:実行するmake
と、コンパイラDIMENSION
はが置き換えられていないと文句を言います。
.../lib/someheader.h:7:19:error: ‘DIMENSION’ undeclared here (not in a function)
私の構成の何が問題になっていますか?私は彼らが指定するcmakeの例に従おうとしました(私の強調):
トップレベルのディレクトリでCMakeを実行すると、CMakeLists.txtファイルが処理され、リストされたサブディレクトリに移動します。変数、インクルードパス、ライブラリパスなどが継承されます。