CMake ポリシー CMP0060 とは?

2024-04-02

CMake ポリシー CMP0060 の詳細解説

CMake ポリシー CMP0060 は、CMake 3.3 で導入されたポリシーで、ライブラリのリンク方法に影響を与えます。このポリシーは、デフォルトで OLD 動作に設定されていますが、NEW 動作に変更することもできます。

OLD 動作と NEW 動作の違い

  • OLD 動作:

    • ライブラリのフルパスが暗黙のリンクディレクトリにある場合、リンカーにそのライブラリを検索するように指示します。
    • 従来の CMake プロジェクトと互換性があります。
  • NEW 動作:

    • ライブラリのフルパスが暗黙のリンクディレクトリにある場合でも、フルパスでライブラリをリンクします。
    • より明確で一貫したリンク動作を提供します。
    • 将来の CMake バージョンでデフォルトになる可能性があります。

CMP0060 の設定方法

CMP0060 ポリシーは、以下の方法で設定できます。

  • cmake_policy() コマンド:
cmake_policy(CMP0060 NEW)
  • cmake_minimum_required() コマンド:
cmake_minimum_required(VERSION 3.3)
set(CMAKE_POLICY_CMP0060 NEW)

注意事項

  • CMP0060 ポリシーを NEW に設定すると、従来の CMake プロジェクトとの互換性が失われる可能性があります。
  • 暗黙のリンクディレクトリに依存しているプロジェクトは、CMP0060 ポリシーを NEW に設定する前に、明示的なリンクディレクトリを使用するように変更する必要があります。

補足

  • CMake ポリシーは、CMake の動作を制御するための仕組みです。
  • さまざまなポリシーがあり、それぞれ異なる動作に影響を与えます。
  • ポリシーは、プロジェクトのニーズに合わせて設定する必要があります。


CMake ポリシー CMP0060 のサンプルコード

# 従来の CMake プロジェクト

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/modules)

find_library(FOO foo)
target_link_libraries(bar ${FOO})

NEW 動作

# CMP0060 ポリシーを NEW に設定

cmake_policy(CMP0060 NEW)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/modules)

find_library(FOO foo)
target_link_libraries(bar ${CMAKE_BINARY_DIR}/lib/foo.so)

補足

  • 上記のサンプルコードは、あくまでも参考です。
  • プロジェクトのニーズに合わせて、コードを変更する必要があります。


CMake ポリシー CMP0060 を設定するその他の方法

cmake_minimum_required(VERSION 3.3)

# CMake 3.3 以降では、デフォルトで OLD 動作になります。
# 必要に応じて、NEW 動作に設定できます。
set(CMAKE_POLICY_CMP0060 NEW)

ターゲットプロパティ

target_link_libraries(bar
    PUBLIC
        ${CMAKE_BINARY_DIR}/lib/foo.so
)

環境変数

export CMAKE_POLICY_CMP0060=NEW

補足

  • 上記の方法以外にも、CMake GUI や IDE を使用して CMP0060 ポリシーを設定することができます。

その他の方法

  • CMake の設定ファイル (.cmake) を使用してポリシーを設定することもできます。



CMake include() で効率的なビルドを実現

include() は CMake の重要なコマンドの一つで、他の CMake ファイルやモジュールを読み込むために使用されます。 これにより、コードを分割し、再利用性と保守性を向上させることができます。機能他の CMake ファイルを読み込んで、その中のコマンドを実行する



CMake find_file() コマンドの代替方法:もっと柔軟なファイル検索

<variable>: 検索結果を格納する CMake 変数<file_names>: 検索するファイル名のリスト (スペース区切り)<path_list>: 検索するパス名のリスト (スペース区切り)<options>: 検索オプション (後述)


CMake find_libraryコマンドとfind_packageモジュールの比較

find_library() コマンドは、CMake で外部ライブラリを見つけるために使用されます。これは、プロジェクトに必要なライブラリを自動的に検出して、ビルドプロセスを簡略化するのに役立ちます。コマンドフォーマット<VAR>: 検索結果を格納する変数名


CMake: find_library()とtarget_link_directories()の連携

target_link_directories()コマンドは、CMakeプロジェクト内のターゲットに対して、リンカがライブラリを検索するディレクトリを指定するために使用されます。これは、ターゲットがリンクするライブラリが標準の検索パスに存在しない場合に特に重要です。


プログラミング初心者でもわかる!CMake の "set_directory_properties()" コマンドの使い方

set_directory_properties() コマンドは、CMakeプロジェクト内のディレクトリとサブディレクトリにプロパティを設定するために使用されます。これらのプロパティは、ビルドプロセス、インストール、その他の CMake 動作を制御するために使用できます。



CMake include() で効率的なビルドを実現

include() は CMake の重要なコマンドの一つで、他の CMake ファイルやモジュールを読み込むために使用されます。 これにより、コードを分割し、再利用性と保守性を向上させることができます。機能他の CMake ファイルを読み込んで、その中のコマンドを実行する


CMake の Variables に関連する CMAKE_FRAMEWORK_PATH のプログラミング解説

CMake の CMAKE_FRAMEWORK_PATH 変数は、フレームワークライブラリの場所を指定するために使用されます。これは、クロスプラットフォーム開発プロジェクトで特に重要であり、異なるオペレーティングシステムで異なるフレームワークパスが必要になる場合があります。


CMakeのLANG_CPPLINTプロパティによる静的コード解析

LANG_CPPLINTは、CMakeでC++コードの静的コード解析を行うためのプロパティです。Properties: Targetsに設定することで、特定のターゲットに対してC++ Lintツールを実行することができます。設定方法LANG_CPPLINTは以下の方法で設定できます。


CABLE ライブラリと CMake: FindCABLE モジュールでインストール状況を検知する方法

FindCABLE は以下の情報を設定します。CABLE: CABLE 実行ファイルのパスCABLE_TCL_LIBRARY: Tcl ラッパーライブラリのパスCABLE_INCLUDE_DIR: インクルードディレクトリのパスTcl ラッパーをビルドするには、共有ライブラリを追加し、${CABLE_TCL_LIBRARY} にリンクする必要があります。


AIが教える! 制約条件で自由自在! 魅力的なタイトルの作り方

「LINK_OPTIONS」 は、CMake プロジェクトにおいて、ターゲットのリンカオプション を設定するためのプロパティです。これは、リンカが実行時に処理するコマンドラインオプションを指定するために使用されます。ターゲットのリンカオプションを設定するには、以下の2つの方法があります。