この質問は リンクを駆動するときにCXXとCXXFLAGSを使用するようにCmakeに指示しますか? 前の質問では、リンカーを呼び出すときにCXXFLAGS
を使用するようにCMakeに指示しようとしています。
add_compile_options(
次のコードが見つかりました
if (CMAKE_VERSION VERSION_LESS 2.8.12)
add_definitions(-foo)
else()
add_compile_options(-foo)
endif()
message(STATUS, "CXXFLAGS: ${CMAKE_CXX_FLAGS}")
出力を生成します
CXXFLAGS:
SET CMAKE_CXX_FLAGS(
次のコードが見つかりました
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -foo" )
message(STATUS, "CXXFLAGS: ${CMAKE_CXX_FLAGS}")
出力を生成します
CXXFLAGS: -foo
質問
どちらの場合でも、CMakeは-foo
を使用してオブジェクトファイルを作成します。したがって、-foo
は間違いなくCXXFLAGS
に移行しています。
CMakeコードの最初のセットとCMakeコードの2番目のセットの違いは何ですか?
あるインスタンスでCMAKE_CXX_FLAGS
が設定解除され、他のインスタンスで設定されるのはなぜですか?
_CMAKE_CXX_FLAGS
_は、すべてのC++ターゲットにフラグを追加するために使用されます。これは、警告レベルなどの一般的な引数を渡すか、選択した必要なC++標準に渡すのに便利です。 CまたはFortranターゲットには影響せず、ユーザーは追加のフラグを渡す場合があります。
_add_compile_options
_は、ディレクトリおよびそのサブディレクトリ内のすべてのターゲットにオプションを追加します。これは、ディレクトリにライブラリがあり、ライブラリに関連するすべてのターゲットにオプションを追加したいが、他のすべてのターゲットとは関係がない場合に便利です。さらに、_add_compile_options
_は生成式で引数を処理できます。 documentation は明示的に述べている、
このコマンドを使用してオプションを追加できますが、プリプロセッサ定義を追加する(
target_compile_definitions()
およびadd_definitions()
)またはディレクトリを含める(target_include_directories()
およびinclude_directories()
)。
add_definitions
_は、プリプロセッサ変数を定義および設定するタイプ_-DFOO -DBAR=32
_(Windowsでは_/D
_)のプリプロセッサ値を渡すことを目的としています。任意のフラグを渡すことができますが、上記の形式のフラグが検出され、_[COMPILE_DEFINITIONS][2]
_プロパティに追加されます。これは後で読み取りおよび変更できます。ここでは、ジェネレータ式も使用できます。 documentation は、ディレクトリ、ターゲット、およびソースファイルのスコープに言及しています。特定のターゲットについて、CMakeは_CMAKE_CXX_FLAGS
_、ターゲットとディレクトリの_COMPILE_DEFINITIONS
_、およびターゲットに影響するすべての_add_compile_options
_からすべてのフラグを収集します。
_CMAKE_CXX_FLAGS
_は、他のコマンドによって変更されることはなく、その逆も同様です。これは、これらのコマンドの範囲に違反します。