16

CMake ファイル (CMake 2.8.10.2) の C および C++ コンパイル行にさまざまなフラグを追加する必要があります。使用している人もいますadd_definitionsが、私が見る限り、これはプリプロセッサ フラグ ( -D) を対象としています。プリプロセッサに渡したくないフラグがいくつかあります。

だから私は変更しようとしてきましCMAKE_C_FLAGSCMAKE_CXX_FLAGS. 一部の人々が次のようなものを使用していたことがわかります。

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -new -flags -here")

しかし、これは効率が悪いことをcmakeのドキュメントで読みました。正しい方法はlist(APPEND ...)、次のように を使用することです。

list(APPEND CMAKE_C_FLAGS -new -flags -here)

ただし、これを行うと、コンパイル行にセミコロンで区切られたフラグが含まれており、構文エラーになります。これは現在、リストが内部に保存されていることを読みましたが、変数を使用すると、これは cmake によって処理されると考えました。これはとても基本的なことのようです。私は何か間違ったことをしていますか?つまり、セミコロンで区切られた値のリストが必要でない限り (そして、Windows の %PATH% 設定などを推測する以外に、誰がそれを望んでいるか) 使用できない場合、これらのリストは一体何の役に立つのでしょうか? ドキュメントでは効率が悪い/適切ではないことが示唆されていますが、引用されたバージョンを使用する必要がありますか?

4

2 に答える 2

8

この場合、通常はこのset(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -new -flags -here")テクニックを使用します。

他のほとんどのコンテキストでは、CMake はセミコロンで区切られたリストをコンパイラにとって意味のあるもの (実行可能ファイルのソース ファイルのリストなど) に「変換」できますが、この場合、CMake はフラグをコンパイラ/リンカーに渡す単一の完全な文字列。

フラグのリストを CMake リストとして保持したい場合は可能ですが、CMakeLists.txt を終了する前に、リストを の単一の文字列値に「変換」することもできますがCMAKE_C_FLAGS、これは珍しいことです。

于 2013-05-08T07:18:28.823 に答える