ビルドで CMake を使用しています。次のようなコンパイラフラグを設定しようとしています:
set(CMAKE_C_FLAGS_DEBUG "-option1 -option2 -option3")
ただし、コンパイラ フラグの 1 つが設定されていないため、ビルドが失敗します。
CMake-GUI の変数の値が空であることを確認すると、次のようになります。
誰かが何が起こっているのか指摘できますか?
cmake-gui で表示されるのは、キャッシュ ステータスです。明示的にキャッシュした変数、または定義済みの cmake キャッシュ変数のみが表示されます。
今、あなたがするとき:
set(CMAKE_C_FLAGS_DEBUG "-option1 -option2 -option3")
あなたは何か特別なことをしています.定義済みのcmakeキャッシュ変数と同じ名前を持つ「ローカル」(キャッシュされていない)変数を設定しています. C++ では、グローバル変数と同じ名前でローカル変数を定義するようなものです。ローカル変数はグローバル変数を隠します。
set
ドキュメントから。(ドキュメントでは、私が「ローカル」と呼んでいるものを「通常」と呼んでいます)
両方のタイプが同じ名前で異なる値で同時に存在できます。${FOO} が評価されると、CMake はまずスコープ内で通常の変数 'FOO' を探し、設定されている場合はそれを使用します。通常の変数が存在しない場合にのみ、キャッシュ変数「FOO」にフォールバックします。
既に効果的に CMAKE_C_FLAGS_DEBUG を設定しており、コンパイラは指定したフラグを使用します。次の方法で確認できます。
message(STATUS "CMAKE_C_FLAGS_DEBUG = ${CMAKE_C_FLAGS_DEBUG}")
つまり、あなたの建物は別の理由で失敗しています。make がどのコマンド ラインを生成するかを確認します: make VERBOSE=1
.
ちなみに、次のようにして、定義済みのフラグにフラグを追加することをお勧めします。
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -option1 -option2 -option3")
CMAKE_C_FLAGS
これらの設定をすべてのビルド タイプに適用する場合は、他の定義済み変数の使用も検討してください。
CMAKE_BUILD_TYPE
これは、cmake-gui インターフェイスを介して行うか、または cmake コマンド ラインに何かを追加することで実行でき-DCMAKE_BUILD_TYPE=Debug
ます-DCMAKE_BUILD_TYPE=Release
。