回答:
長い間、CMakeはadd_definitions
この目的のためのコマンドを持っていました。ただし、最近このコマンドは、よりきめの細かいアプローチ(コンパイル定義、インクルードディレクトリ、コンパイラオプション用の個別のコマンド)に置き換えられました。
新しいadd_compile_definitionsを使用した例:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION})
add_compile_definitions(WITH_OPENCV2)
または:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION} WITH_OPENCV2)
これについての良い部分は、それがCMakeが用意している粗末な策略を回避することですadd_definitions
。CMakeはそのような粗末なシステムですが、彼らはついに正気を見つけ始めています。
コンパイラフラグに使用するコマンドの詳細については、https://cmake.org/cmake/help/latest/command/add_definitions.htmlをご覧ください。
同様に、ジムハンジカーの回答で説明されているように、ターゲットごとにこれを行うことができます。
add_compile_definitions
スローしCMake Error at CMakeLists.txt:6 (add_compile_definitions): Unknown CMake command "add_compile_definitions".
ます。add_compile_options(-D <your-def>)
代わりに使用する必要がありました。
cmake -D CMAKE_CXXFLAGS='-DDEBUG_CHESSBOARD'
(テストされていません)
https://cmake.org/cmake/help/v3.17/command/add_compile_definitions.html#command:add_compile_definitions
、ページが消えるまでバージョン番号を変更していきます。それはまだ存在しないバージョンです。次の移動では、Whats new
セクションに移動して、新しいコマンドまたは機能を見つけることができます。だからそれほど難しくはありません。
特定のターゲットに対してこれを行うには、以下を実行できます。
target_compile_definitions(my_target PRIVATE FOO=1 BAR=1)
ビルドしているターゲットが複数あり、それらすべてに同じフラグを使用させたくない場合は、これを行う必要があります。target_compile_definitionsの公式ドキュメントも参照してください。
target_compile_definitions(my_target PRIVATE FOO=1)
違うのset_source_files_properties(foo.cpp PROPERTIES COMPILE_DEFINITIONS -DFOO=1)
?
target_compile_definitions
WHOLE実行可能ファイル/ライブラリの値を設定します。'set_source_files_properties`は指定されたファイルのみの値を設定します。Latterコマンドでは、ファイルを別の言語を使用してコンパイルできます。すなわち:set_source_files_properties(compile_me_as_objc.c PROPERTIES -x objective-c
。これ-x objective-c
はGCC / Clangに固有のフラグであることに注意してください。
このページで提案されている他のソリューションは、Cmake <のいくつかのバージョンで役立ち
3.3.2
ます。ここで私が使用しているバージョン(つまり、3.3.2
)のソリューション。を使用してCmakeのバージョンを確認$ cmake --version
し、ニーズに合ったソリューションを選択します。cmakeのドキュメントは、公式ページにあります。
CMakeバージョン3.3.2では、
#define foo
私は使用する必要がありました:
add_definitions(-Dfoo) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)
そして、次のようなプリプロセッサマクロ定義を作成するには:
#define foo=5
行はそのように変更されています:
add_definitions(-Dfoo=5) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)
add_definitions()
またはを使用する必要がありtarget_compile_definitions()
ます。より新しいコマンドはadd_compile_definitions()
、CMake 3.12まで追加されませんでした。@ Leos313