1. ホーム
  2. cmake

[解決済み] cmake --verbose=1` は冗長なcmake出力をしますが、`cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON` はそうならないのはなぜですか?

2022-03-07 19:50:59

質問

私のゴールは g++ から直接呼び出される cmake をコマンドラインから実行します。の出力は気にしない。 make この質問の目的からすると

によると 公式FAQ 関連する質問に対する回答 を確認する必要があります。 CMAKE_VERBOSE_MAKEFILE:BOOL=ON は、私が生成した CMakeCache.txt は、例えばコマンドラインフラグを渡すことで -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON . 私はそれをしたとき、それはプロパティの束を再クエリするが、呼び出しに関する余分な情報を与えなかった。

しかし cmake というフラグで --verbose=1 は、まさに私が必要としているものを示してくれたのです。

この2つのオプションは、何が違うのでしょうか?それは --verbose=1 非推奨、あるいは推奨されないのでしょうか?

どのように解決するのですか?

いいえ、それはあなたがリンクする受け入れられた答えとCMake FAQが言うことではありません、さもなければ私は驚きます。
正確には、次のようなことは書かれていません。 すべき モディファイ CMakeCache.txt . そのファイルを修正しないでください。間違いを犯しやすいので、良い方法とは言えません。 .
その代わりに、両方のソースに書かれていることに忠実に従った場合、つまり、以下のようになります。

cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON .
make

または

cmake .
make VERBOSE=1

を選択した場合、コンパイルとリンクの段階から冗長な出力が表示されたことでしょう。
または、同じように CMakeLists.txt ファイルには、次のような行があります。

set( CMAKE_VERBOSE_MAKEFILE on )

あるケースで出力が表示されないのは、以前にキャッシュされた設定によるものかもしれません。
この場合、ビルドディレクトリを削除するだけで、CMakeが生成したすべてのファイルとディレクトリを取り除くことができるように、可能であればアウトオブソースのビルドを行うことをお勧めします。
そうすれば、以前に生成された設定やビルドファイルの干渉を受けずに、新しい設定を作り直すことができます。
もちろん、私が間違っていてバグに当たったのかもしれませんが、その可能性は低いと思われます。


EDIT : それは、設定段階ではコンパイルしていないからです。つまり、Makefile を使っていないからで、コマンドラインオプションはそれを設定するものです。の冗長オプションではありません。 cmake コマンドを使用することで、プロジェクトのビルドのどの段階(設定、コンパイル、インストール)でも、そのコマンドを使用することができます。を実行したときに、余計な設定情報を表示することはありません。 cmake . を実行したときに余分な情報を表示するはずです。 make .
だから CMAKE_VERBOSE_MAKEFILE は、CMake 自身から冗長な出力を得たい場合に設定すべき間違ったオプションです。