メジャーバージョンアップをスマートに!CMakeで`CMAKE_PROJECT_VERSION_MAJOR`変数を使いこなす
CMAKE_PROJECT_VERSION_MAJOR
は、CMakeプロジェクトのバージョン情報の一部を構成する変数です。具体的には、プロジェクトのメジャーバージョンを表します。
バージョン番号の構成
CMakeプロジェクトのバージョン情報は、以下の3つのコンポーネントで構成されます。
- パッチバージョン (
CMAKE_PROJECT_VERSION_PATCH
): マイナーバージョン内の細かな修正を表します。 - マイナーバージョン (
CMAKE_PROJECT_VERSION_MINOR
): メジャーバージョン内のマイナーな変更を表します。 - メジャーバージョン (
CMAKE_PROJECT_VERSION_MAJOR
): プロジェクトの主要な変更を表します。
設定方法
CMAKE_PROJECT_VERSION_MAJOR
変数は、プロジェクトのトップレベルCMakeLists.txtファイル内のproject()
コマンドで設定します。
project(MyProject VERSION 1.2.3)
上記の例では、MyProject
という名前のプロジェクトのバージョン情報が1.2.3
に設定されます。この場合、CMAKE_PROJECT_VERSION_MAJOR
は1
、CMAKE_PROJECT_VERSION_MINOR
は2
、CMAKE_PROJECT_VERSION_PATCH
は3
となります。
使用方法
CMAKE_PROJECT_VERSION_MAJOR
変数は、プロジェクトのバージョン情報をビルドプロセスやアプリケーションコードに組み込むために使用できます。
例
以下の例では、CMAKE_PROJECT_VERSION_MAJOR
変数を用いて、アプリケーションのバージョン情報を出力するコードを示します。
#include <iostream>
int main() {
std::cout << "Version: " << CMAKE_PROJECT_VERSION_MAJOR << "." << CMAKE_PROJECT_VERSION_MINOR << "." << CMAKE_PROJECT_VERSION_PATCH << std::endl;
return 0;
}
CMAKE_PROJECT_VERSION_MAJOR
変数は、CMAKE_PROJECT_VERSION
変数の一部として使用されます。CMAKE_PROJECT_VERSION_MAJOR
変数は、プロジェクトのトップレベルCMakeLists.txtファイルで一度だけ設定する必要があります。CMAKE_PROJECT_VERSION_MAJOR
変数は、CMake 3.12以降で使用可能です。
- CMakeのバージョンによって、仕様が変更される可能性があります。
- 上記の情報は、CMake 3.24.1時点のものです。
cmake_minimum_required(VERSION 3.12)
project(MyProject VERSION 1.2.3)
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
バージョン情報を出力するアプリケーション
#include <iostream>
int main() {
std::cout << "Version: " << CMAKE_PROJECT_VERSION_MAJOR << "." << CMAKE_PROJECT_VERSION_MINOR << "." << CMAKE_PROJECT_VERSION_PATCH << std::endl;
return 0;
}
ヘッダーファイルでバージョン情報マクロを定義
#ifndef PROJECT_VERSION_H
#define PROJECT_VERSION_H
#define PROJECT_NAME "MyProject"
#define PROJECT_VERSION_MAJOR 1
#define PROJECT_VERSION_MINOR 2
#define PROJECT_VERSION_PATCH 3
#endif
アプリケーションコードでバージョン情報マクロを使用
#include "project_version.h"
#include <iostream>
int main() {
std::cout << PROJECT_NAME << " Version: " << PROJECT_VERSION_MAJOR << "." << PROJECT_VERSION_MINOR << "." << PROJECT_VERSION_PATCH << std::endl;
return 0;
}
CMakeLists.txtファイルでバージョン情報を出力するターゲットを設定
add_executable(version_info main.cpp)
target_sources(version_info main.cpp)
target_link_libraries(version_info ${CMAKE_THREAD_LIBS})
add_test(version_info_test version_info COMMAND ${CMAKE_BINARY_DIR}/version_info)
ビルドと実行
mkdir build
cd build
cmake ..
make
./version_info
出力例
MyProject Version: 1.2.3
説明
project()
コマンドでプロジェクトの名前とバージョン情報を設定します。- アプリケーションコードで
CMAKE_PROJECT_VERSION_MAJOR
変数を使用して、バージョン情報を出力します。 - ヘッダーファイルでバージョン情報マクロを定義します。
- アプリケーションコードでバージョン情報マクロを使用して、バージョン情報を出力します。
- CMakeLists.txtファイルでバージョン情報を出力するターゲットを設定します。
- ビルドと実行を行い、バージョン情報を出力します。
- 実際のプロジェクトでは、必要に応じてコードを修正する必要があります。
- CMakeのバージョンによって、仕様が変更される可能性があります。
- 上記の情報は、CMake 3.24.1時点のものです。
CMake GUIを使用する
CMake GUIを使用すると、CMAKE_PROJECT_VERSION_MAJOR
変数を視覚的に設定することができます。
手順
- CMake GUIを開きます。
- プロジェクトのCMakeLists.txtファイルを選択します。
- 左側のツリービューで
Project
ノードを選択します。 - 右側のペインで
Version
フィールドにバージョン情報を入力します。 Generate
ボタンをクリックして、CMakeプロジェクトを生成します。
CMakeLists.txtファイルを手動で編集する
CMakeLists.txtファイルを手動で編集して、CMAKE_PROJECT_VERSION_MAJOR
変数を設定することもできます。
set(CMAKE_PROJECT_VERSION_MAJOR 1)
CMAKE_SET_VERSION_INFORMATIONコマンドを使用する
CMAKE_SET_VERSION_INFORMATION
コマンドを使用すると、プロジェクトのバージョン情報を詳細に設定することができます。
cmake_minimum_required(VERSION 3.15)
project(MyProject VERSION 1.2.3)
set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
cmake_set_version_information(
VERSION ${PROJECT_VERSION}
COMPATIBILITY ${PROJECT_VERSION}
SODIUM ${PROJECT_VERSION})
外部スクリプトを使用する
外部スクリプトを使用して、CMAKE_PROJECT_VERSION_MAJOR
変数を設定することもできます。
例
import sys
version_major = 1
version_minor = 2
version_patch = 3
print("CMAKE_PROJECT_VERSION_MAJOR:{}".format(version_major))
print("CMAKE_PROJECT_VERSION_MINOR:{}".format(version_minor))
print("CMAKE_PROJECT_VERSION_PATCH:{}".format(version_patch))
このスクリプトをversion.py
という名前で保存し、CMakeLists.txtファイルで以下のように呼び出します。
include(version.py)
- 外部スクリプトを使用する場合は、スクリプトのセキュリティに注意する必要があります。
- 上記の方法を使用する場合は、CMakeのバージョン要件を確認する必要があります。