Cmakeを使ってプリプロセッサ変数を定義する方法を教えてください。
同等のコードは#define foo
です。
長い間、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
同様に、Jim Hunzikerの答えで説明されているように、ターゲットごとにこれを行うことができます。
特定のターゲットに対してこれを行うには、次のようにします。
target_compile_definitions(my_target PRIVATE FOO=1 BAR=1)
あなたが構築しているターゲットが複数あり、それらすべてに同じフラグを使用させたくない場合は、これを行うべきです。 target_compile_definitions に関する公式文書も参照してください。
このページで提案されている他の解決策は有用ですCmakeの古いバージョンのために。これが新しいバージョンの解決策です。
$ cmake --version
を使用してCmakeのバージョンを確認し、ニーズに合ったソリューションを選択してください。 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(....)