CMake_PROJECT_VERSION_MAJOR を使用してヘッダーファイルのバージョンマクロを定義する方法

2024-04-02

CMAKE_PROJECT_VERSION_MAJOR の詳細な解説

CMAKE_PROJECT_VERSION_MAJOR は、CMake プロジェクトのメジャーバージョンを表す変数です。プロジェクトのバージョン情報を設定する project() コマンドによって設定されます。この変数は、ビルドプロセス全体で使用でき、プロジェクトのバージョンを特定するために役立ちます。

バージョン表記

CMake では、プロジェクトのバージョンを3つの部分で構成します。

  • メジャーバージョン: プロジェクトの大幅な変更を表します。互換性を維持できない変更を加えた場合に増加します。
  • マイナーバージョン: プロジェクトの後方互換性を維持できる変更を表します。新機能やバグ修正などを含む場合に増加します。
  • パッチバージョン: バグ修正のみを含むマイナーな変更を表します。

CMAKE_PROJECT_VERSION_MAJOR は、この3つの部分のうち、メジャーバージョンを表します。

設定方法

CMAKE_PROJECT_VERSION_MAJOR は、project() コマンドの VERSION オプションで設定できます。以下の例では、プロジェクトのメジャーバージョンを 1 に設定しています。

project(MyProject VERSION 1.0.0)

使用例

CMAKE_PROJECT_VERSION_MAJOR は、さまざまな場面で使用できます。以下は、その使用例です。

  • ビルドファイルのバージョン情報を出力する
message(STATUS "Project version: ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH}")
  • 異なるバージョンのプロジェクトを区別する
if(CMAKE_PROJECT_VERSION_MAJOR LESS 2)
  # 古いバージョンのプロジェクト向けの処理
else()
  # 新しいバージョンのプロジェクト向けの処理
endif()

注意事項

  • CMAKE_PROJECT_VERSION_MAJOR は、CMake 3.12 以降で導入された変数です。それ以前のバージョンの CMake を使用している場合は、この変数は使用できません。
  • project() コマンドで VERSION オプションを指定しない場合、CMAKE_PROJECT_VERSION_MAJOR はデフォルトで 0 に設定されます。

補足

  • 上記の説明に加えて、以下の点にも注意が必要です。

    • CMAKE_PROJECT_VERSION_MAJOR は、文字列型変数です。
    • CMAKE_PROJECT_VERSION_MAJOR は、プロジェクト内のすべての CMake ファイルで使用できます。
    • CMAKE_PROJECT_VERSION_MAJOR は、CMake キャッシュに保存されます。
  • CMAKE_PROJECT_VERSION_MAJOR を使用して、プロジェクトのバージョン情報を管理することができます。この情報は、ビルドプロセス全体で使用でき、プロジェクトのバージョンを特定するために役立ちます。



CMake Variables 関連のサンプルコード

project(MyProject VERSION 1.2.3)

message(STATUS "Project version: ${CMAKE_PROJECT_VERSION_MAJOR}.${CMAKE_PROJECT_VERSION_MINOR}.${CMAKE_PROJECT_VERSION_PATCH}")

出力例:

Project version: 1.2.3

異なるバージョンのプロジェクトを区別する

project(MyProject VERSION 1.2.3)

if(CMAKE_PROJECT_VERSION_MAJOR LESS 2)
  message(STATUS "This is an older version of the project.")
else()
  message(STATUS "This is a newer version of the project.")
endif()

出力例 (CMake 3.11 以下で実行):

This is an older version of the project.

出力例 (CMake 3.12 以降で実行):

This is a newer version of the project.

CMAKE_PROJECT_VERSION_MAJOR を使用してファイル名にバージョン情報を追加する

project(MyProject VERSION 1.2.3)

set(output_file "my_project_${CMAKE_PROJECT_VERSION_MAJOR}.exe")

add_executable(${output_file} main.cpp)

生成されるファイル:

  • my_project_1.exe

CMAKE_PROJECT_VERSION_MAJOR を使用してインストールパスにバージョン情報を追加する

project(MyProject VERSION 1.2.3)

set(install_dir "/usr/local/my_project/${CMAKE_PROJECT_VERSION_MAJOR}")

install(TARGETS MyProject DESTINATION ${install_dir})

インストールされるファイル:

  • /usr/local/my_project/1/MyProject

CMAKE_PROJECT_VERSION_MAJOR を使用してヘッダーファイルのバージョンマクロを定義する

project(MyProject VERSION 1.2.3)

set(header_file "my_project.h")

configure_file(${header_file} ${header_file}.in @ONLY)

add_library(MyProject SHARED main.cpp ${header_file})

install(TARGETS MyProject DESTINATION /usr/local/lib)
install(FILES ${header_file} DESTINATION /usr/local/include)

my_project.h:

#ifndef MY_PROJECT_H
#define MY_PROJECT_H

#define MY_PROJECT_VERSION_MAJOR 1
#define MY_PROJECT_VERSION_MINOR 2
#define MY_PROJECT_VERSION_PATCH 3

#endif


CMAKE_PROJECT_VERSION_MAJOR 以外の方法

手動でバージョン情報を設定する

set(PROJECT_VERSION "1.2.3")

# ...

message(STATUS "Project version: ${PROJECT_VERSION}")

バージョン管理システムを使用する

Git や Subversion などのバージョン管理システムを使用している場合は、バージョン情報をバージョン管理システムから取得することができます。

# Git を使用している場合

set(PROJECT_VERSION "${GIT_DESCRIBE}")

# ...

message(STATUS "Project version: ${PROJECT_VERSION}")

カスタム CMake モジュールを使用する

プロジェクトのバージョン情報を管理するカスタム CMake モジュールを作成することができます。

# my_version.cmake

set(PROJECT_VERSION "1.2.3")

# ...

function(get_project_version)
  set(_version ${PROJECT_VERSION})
  set(PROJECT_VERSION "")
  return(_version)
endfunction()

# ...

include(my_version.cmake)

message(STATUS "Project version: ${PROJECT_VERSION}")

上記は、CMAKE_PROJECT_VERSION_MAJOR 以外の方法です。これらの方法を参考に、プロジェクトのバージョン情報を管理することができます。




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

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



CMakeコマンド mark_as_advanced() の詳細解説

mark_as_advanced() は、CMakeプロジェクトで特定のキャッシュ変数を "詳細設定" としてマークするために使用されるコマンドです。このコマンドによって、GUI ツールでこれらの変数はデフォルトでは表示されなくなり、ユーザーは "詳細設定" オプションを有効にするまで編集できなくなります。


CMakeコマンド「ctest_submit()」でテスト結果をCDashサーバーに送信

ctest_submit()は、CMakeの「Commands」カテゴリに属するコマンドで、テスト結果をCDashなどのダッシュボードサーバーに送信するために使用されます。テスト実行後の結果を可視化、共有したい場合に役立ちます。基本構文オプション解説


C++標準ライブラリ、テンプレートエンジン、シェルスクリプト... string()コマンドの代替方法を徹底比較

CMakeのstring()コマンドは、文字列処理を行うための強力なツールです。C++のstd::stringのような機能に加え、CMake特有の便利な機能も備えています。主な機能文字列の連結、分割、置換、比較大文字・小文字変換部分文字列の抽出


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

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



CMake GUIでOSX_ARCHITECTURES_CONFIGを設定する方法

概要デフォルト値: OSX_ARCHITECTURES プロパティによって設定されます。データ型: STRING使用箇所: ターゲットのプロパティ設定方法: CMake GUICMake GUI設定例詳細解説OSX_ARCHITECTURES_CONFIG は、ターゲット毎に異なるアーキテクチャを指定するために使用できます。例えば、"my_app" は "Debug" 構成では x86_64 と arm64 アーキテクチャでビルドし、"Release" 構成では x86_64 アーキテクチャのみでビルドするといった設定が可能です。


CMakeコマンド mark_as_advanced() の詳細解説

mark_as_advanced() は、CMakeプロジェクトで特定のキャッシュ変数を "詳細設定" としてマークするために使用されるコマンドです。このコマンドによって、GUI ツールでこれらの変数はデフォルトでは表示されなくなり、ユーザーは "詳細設定" オプションを有効にするまで編集できなくなります。


CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE変数のサンプルコード

CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE変数は、CMakeが生成するXcodeスキームの診断セクションで動的リンカーAPIの使用状況を表示するかどうかを設定します。デフォルト値FALSE設定方法


CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTSの詳細解説

CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS は、CMake 3.13 で導入された変数です。これは、Xcode プロジェクトで生成されるスキームの 診断 セクションにおける ゾンビオブジェクト の有効化を制御します。


CMakeの「Commands」における「cmake_path()」関数

試合形式試合時間は前半40分、後半40分の計80分です。ハーフタイムは15分以内です。試合は2チームで行われ、それぞれ15人の選手がフィールドに出ます。選手は、ボールを持って走る、パスする、キックするなどのプレーができます。相手選手をタックルして倒すこともできます。