cmakeポリシーを設定するには?

cmakeポリシーを設定するには?

ARMベースのノートブック用のParaviewグラフィックビジュアライゼーションソフトウェアをコンパイルしようとしていますが、cmakeの「ポリシー」に関連しているように見えるいくつかの設定警告が表示されます。警告テキストとcmakeのマニュアルページには、特定のポリシーを設定するためにコマンドを実行できる必要があることが示されていますが、cmake_policy()それを実行する方法と場所がわかりません。

特定のcmakeポリシーを設定するには?

答え1

CMake コマンドはcmake_policy()次に文書化されています。CMakeドキュメント

CMakeLists.txtCMake自体の動作を変更するためにプロジェクトファイルに追加されることがよくあり、通常はCMakeLists.txt最新バージョンのCMakeで以前の機能を処理できます。

これを使用して個々のポリシーを設定できます。

cmake_policy(SET CMP<NNNN> OLD)

<NNNN>CMakeポリシー番号です。ここでは、OLDこのポリシーに適用したい「以前の動作」(該当する単語にOLDなることもあります)を示しますNEW

または、このコマンドを使用して、特定のバージョンのCMakeと互換性のあるポリシーを設定できます。

cmake_policy(VERSION x.xx)

少なくともx.xx2.4

どちらの場合もCMakeLists.txtプロジェクトファイルが変更されるため、cmake再実行する必要があります。

ドキュメントも参照してくださいcmake_minimum_required()

答え2

私はCmakeバージョン3.22.0を使用していますが、@kusalanandaの答えは問題を解決しませんでした。上部に次の行を追加しましたが、CMakeLists.txt問題は解決しました。

set(CMAKE_POLICY_DEFAULT_CMP<NNNN> NEW)

もちろん、NNNNこれはコマンドラインで指定された数字で置き換える必要があります。

答え3

最終的なCMakeポリシー警告は、ユーザーにこれらのメッセージに気をつけてはならないことを明確に伝えます。このメッセージはプロジェクト開発者向けです。

CMake Warning (dev) at c/tools/CMakeLists.txt:22 (add_executable):
  Policy CMP0069 is not set: INTERPROCEDURAL_OPTIMIZATION is enforced when
  enabled.  Run "cmake --help-policy CMP0069" for policy details.  Use the
  cmake_policy command to set the policy and suppress this warning.

  INTERPROCEDURAL_OPTIMIZATION property will be ignored for target
  'msgr-recv'.
This warning is for project developers.  Use -Wno-dev to suppress it.

抑制に使用されました-Wno-dev

ただし、ソフトウェアのユーザーとしてプロジェクトをインストールするときにポリシーを設定する理由があります。 1つの理由は、リンク時間最適化(プロシージャ間最適化とも呼ばれます)を有効にすることです。ポリシーが設定されていない場合、CMakeはそれを無視します-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON

この場合、以下を使用できます。-DCMAKE_POLICY_DEFAULT_CMP<NNNN>CMakeLists.txtを編集しなくても必要な動作を得ることができます。もちろん、開発者に連絡してソースコードのポリシーを扱うように提案するのも良い考えです。

-DCMAKE_POLICY_DEFAULT_CMP0069=NEW -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON

関連情報