PROJECT_VERSION_MINORを使ったバージョン管理のベストプラクティス

2024-04-02

CMakeにおけるPROJECT_VERSION_MINOR変数:詳細解説

PROJECT_VERSION_MINORは、CMakeプロジェクトのバージョン管理において重要な役割を果たす変数です。これは、プロジェクトのマイナーバージョン番号を表し、バグ修正や機能追加などのマイナーな変更を反映するために更新されます。

設定方法

PROJECT_VERSION_MINORは、CMakeLists.txtファイル内で以下の2つの方法で設定できます。

直接設定

set(PROJECT_VERSION_MAJOR 1)
set(PROJECT_VERSION_MINOR 2)
set(PROJECT_VERSION_PATCH 3)

PROJECT_VERSION変数から自動生成

project(MyProject VERSION 1.2.3)

この場合、PROJECT_VERSION_MINORは自動的に2に設定されます。

使用方法

PROJECT_VERSION_MINORは、以下の用途で使用できます。

  • ビルドファイルの生成
  • バージョン情報の表示
  • 条件付きの処理

ビルドファイルの生成

PROJECT_VERSION_MINORを使用して、ビルドファイルの名前やパスを生成することができます。

set(output_file "${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.exe")

バージョン情報の表示

PROJECT_VERSION_MINORを使用して、アプリケーションのバージョン情報を表示することができます。

message(STATUS "MyProject version ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")

条件付きの処理

PROJECT_VERSION_MINORを使用して、条件付きの処理を実行することができます。

if(PROJECT_VERSION_MINOR GREATER 1)
  # 新しい機能を有効にする
endif()

ベストプラクティス

  • PROJECT_VERSION_MINORは、プロジェクトのマイナーバージョン番号を表すためにのみ使用してください。
  • バグ修正や機能追加などの変更を行うたびに、PROJECT_VERSION_MINORを更新してください。
  • セマンティックバージョニングを採用することを検討してください。

補足

  • PROJECT_VERSION_MINORは、CMake 2.6以降で利用可能です。
  • PROJECT_VERSION_MINORは、整数値のみ設定できます。
  • PROJECT_VERSION_MINORは、CMake GUIツールでも設定可能です。

この解説が、PROJECT_VERSION_MINOR変数の理解と活用に役立つことを願っています。

  • ご不明な点があれば、お気軽にご質問ください。
  • より詳細な情報は、CMake公式ドキュメントを参照してください。


PROJECT_VERSION_MINORを使用したサンプルコード

project(MyProject VERSION 1.2.3)

message(STATUS "MyProject version ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")

出力例:

MyProject version 1.2.3

条件付きの処理

project(MyProject VERSION 1.2.3)

if(PROJECT_VERSION_MINOR GREATER 1)
  message(STATUS "New feature enabled")
else()
  message(STATUS "Old feature enabled")
endif()

出力例 (PROJECT_VERSION_MINORが2の場合):

New feature enabled

出力例 (PROJECT_VERSION_MINORが1以下の場合):

Old feature enabled

ビルドファイルの生成

project(MyProject VERSION 1.2.3)

set(output_file "${PROJECT_NAME}-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.exe")

add_executable(${output_file} main.cpp)

生成されるファイル:

  • MyProject-1.2.exe

セマンティックバージョニングの例

project(MyProject VERSION 1.2.3-alpha)

# バグ修正
set(PROJECT_VERSION 1.2.4)

# 機能追加
set(PROJECT_VERSION 1.3.0)

# メジャーバージョンアップ
set(PROJECT_VERSION 2.0.0)

バージョン情報の例:

  • 1.2.3-alpha
  • 1.2.4
  • 1.3.0
  • 2.0.0

CMake GUIツールを使用する場合は、プロジェクトのプロパティウィンドウでPROJECT_VERSION_MAJOR、PROJECT_VERSION_MINOR、PROJECT_VERSION_PATCHを設定できます。



PROJECT_VERSION_MINORを設定するその他の方法

環境変数

  • CMAKE_PROJECT_VERSION_MAJOR

これらの環境変数は、CMakeLists.txtファイルが実行される前に設定する必要があります。

例:

export CMAKE_PROJECT_VERSION_MAJOR=1
export CMAKE_PROJECT_VERSION_MINOR=2
export CMAKE_PROJECT_VERSION_PATCH=3

cmake ..

コマンドライン

PROJECT_VERSION_MINORは、以下のコマンドラインオプションを使用して設定することもできます。

  • -DPROJECT_VERSION_MAJOR=

例:

cmake -DPROJECT_VERSION_MAJOR=1 -DPROJECT_VERSION_MINOR=2 -DPROJECT_VERSION_PATCH=3 ..

外部ツール

PROJECT_VERSION_MINORは、外部ツールを使用して設定することもできます。

例:

  • Git: Gitリポジトリを使用している場合は、git describeコマンドを使用してバージョン情報を取得することができます。
set(PROJECT_VERSION $(git describe --tags --abbrev=4))
  • Subversion: Subversionリポジトリを使用している場合は、svn infoコマンドを使用してバージョン情報を取得することができます。
set(PROJECT_VERSION $(svn info --revision))

注意事項

  • 環境変数やコマンドラインオプションを使用してPROJECT_VERSION_MINORを設定する場合は、CMakeLists.txtファイル内で設定するよりも優先されます。
  • 外部ツールを使用してPROJECT_VERSION_MINORを設定する場合は、ツールの出力形式を考慮する必要があります。



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

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



CMake で変数を削除する3つの方法:unset() 以外にも使えるテクニック

<variable_name> は、削除したい変数の名前です。変数の名前は、文字、数字、下線(_)で構成され、先頭に数字以外のアクティブ文字が来る必要があります。変数の削除この例では、MY_VAR という変数を作成し、"Hello, world!" という値を設定します。その後、unset() コマンドを使用して MY_VAR を削除します。2番目の message() コマンドは、MY_VAR が削除されたことを確認するために使用されます。


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

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


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

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


CMakeのCommandsにおけるuse_mangled_mesa()

use_mangled_mesa() は CMake の Commands における関数で、Mesa ライブラリの mangled シンボル名を解決するために使用されます。Mesa は OpenGL の実装であり、古いバージョンの Mesa ではシンボル名が mangled されるため、use_mangled_mesa() を使用してこれらのシンボル名を解決する必要があります。



CMakeFindDependencyMacro モジュールの代替方法

CMakeFindDependencyMacro モジュールは、find_dependency コマンドの動作を拡張し、より柔軟で強力な依存関係管理を実現します。これは、主にパッケージ構成ファイル (<PackageName>Config


JOB_POOL_PRECOMPILE_HEADER プロパティ徹底解説

JOB_POOL_PRECOMPILE_HEADER は、Ninja マルチビルドシステムを使用する場合、プリコンパイル済みヘッダー生成の並列処理を制御する CMake プロパティです。このプロパティを設定することで、ビルド時間の短縮を期待できます。


CMakeのCMAKE_CFG_INTDIR変数: 非推奨と代替案

CMAKE_CFG_INTDIR は、CMakeプロジェクトのビルド時に、各コンフィギュレーション(Debug、Releaseなど)の出力ファイルを格納する中間ディレクトリの名前を指定する変数です。ただし、この変数はCMake 3.21以降で非推奨となり、代わりに<CONFIG>ジェネレータ式を使用することを推奨されています。


CMake の CMAKE_GENERATOR_TOOLSET 変数に関する FAQ

CMAKE_GENERATOR_TOOLSET は CMake の変数であり、特定のジェネレータが使用するネイティブビルドシステムのツールセットを指定します。これは、特定のコンパイラやツールチェーンを選択したり、ビルドプロセスをカスタマイズしたりするために使用できます。


CMake の CMAKE_LANG_COMPILER_ARCHITECTURE_ID 変数を使いこなす

CMAKE_LANG_COMPILER_ARCHITECTURE_ID は、CMake の内部変数であり、コンパイラの ターゲットアーキテクチャ を識別するために使用されます。これは、主に特定のコンパイラに対して、適切な使用方法を決定するために必要となります。