67

サードパーティ コードをビルドすると、CMake から次の警告が表示されます。

CMake Warning:
  Manually-specified variables were not used by the project:

    CMAKE_TOOLCHAIN_FILE

この警告の原因は何ですか? 構成ファイルを確認しましたが、この変数が定義されている場所が見つかりませんでした。

この警告について心配する必要がありますか? 警告が消えるように修正するにはどうすればよいですか?

4

4 に答える 4

60

これは、CMake が使用していないコマンド ライン オプションを指定したときに CMake が生成する標準的な警告です。たとえば、CMakeLists.txt ファイルが実際に変数を使用-DFOO=barcmakeない場合に渡します。FOO

ここで、これは少し特殊なケースですCMAKE_TOOLCHAIN_FILE。ビルドを初めて構成するときに CMake によって使用されますが、構成済みのビルドのツールチェーンを変更することはできないため、この変数は毎回無視されます。したがって、警告。

Answeror がコメントで指摘したように、この警告は無視しても問題ありません。Brad King は 2011 年 2 月 7 日の CMake メーリング リストで次のように説明しました

これを実現するには、既に存在するビルド ツリーで CMake を実行する必要があります。変数は、新しいツリーでの最初の実行で使用されます。再生成するために指定する必要がないため、後で使用される*ことはありません*。CMake は、ファイルをロードするルールを CMakeFiles/CMakeSystem.cmake に既に記録しており、既存のビルド ツリーのツールチェーンの変更をサポートしていません。

IOW、これは警告の正当な例です。

この警告が本当に気になる場合は、警告を抑制するためのオプションがいくつかあります。

  • --no-warn-unused-cli実行時にオプションを渡すことができますcmake

    ただし、これはコマンドラインで指定された未使用の変数からのすべての警告を抑制するため、少し鈍い手段です。これにより、正当な警告が隠される場合があります。

  • 2 回目に呼び出す前に、CMake の最初の呼び出しによって生成された一時ファイルを削除できます。js のコメントで述べたように。CMakeCache.txt、ファイルとCMakeFilesフォルダーを削除する必要があります。たとえば、次のように実行します。

     rm -rf CMakeCache.txt CMakeFiles/
    

    しかし、javs が指摘しているように、これは少し無意味です。実際にツールチェーンを変更しない限り、これらの生成されたファイルを削除する理由はありません。警告は消えますが、ファイルを強制的に再生成するだけで、最小限の利益のために時間を浪費します。

  • 3 番目のオプション (そしておそらく最良のオプション) は、Roland Sarrazin の回答によって与えられます。これには、変数をステータス メッセージに出力するだけで使用できます。この方法では、未使用ではないため、警告はトリガーされません。ツールチェーンの構成に関連する問題のデバッグに役立つメッセージが見つかる場合もあります。

于 2013-06-13T10:45:23.803 に答える