0

私は現在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ファイルが処理され、リストされたサブディレクトリに移動します。変数、インクルードパス、ライブラリパスなどが継承されます。

4

1 に答える 1

1

メインのCMakeLists.txtで次のことを実行できるはずです。

add_definitions(-DDIMENSION=${DATASET_DIMENSION})

あなたの問題は、それがグローバルスコープのプロパティでCOMPILE_DEFINITIONSはないことです。したがって、これを設定しても効果はありません。これをdirectory-scopeプロパティと混同している可能性がありますか?

于 2013-03-26T14:50:00.653 に答える