CMakeでプラットフォームとコンパイラ情報を取得する方法:`build_name()`と代替手段
このコマンドは、以下の情報を文字列として返していました。
- 使用しているコンパイラ
- 使用しているプラットフォーム
しかし、これらの情報は、以下の変数でより詳細かつ明確に取得することが可能です。
- CMAKE_CXX_COMPILER: 使用しているC++コンパイラに関する情報
- CMAKE_SYSTEM: 使用しているプラットフォームに関する情報
非推奨となった理由
build_name()
コマンドは、以下の理由で非推奨となりました。
- 誤解を招く可能性がある
- プラットフォームやコンパイラによって、返される文字列の形式が異なる
- 情報量が限定的であり、必要な情報がすべて含まれていない可能性がある
代替手段
build_name()
コマンドの代わりに、以下の変数を使用することを推奨します。
- CMAKE_SYSTEM: 使用しているプラットフォームに関する情報は以下の例のように取得できます。
message(STATUS "CMAKE_SYSTEM: ${CMAKE_SYSTEM}")
- CMAKE_CXX_COMPILER: 使用しているC++コンパイラに関する情報は以下の例のように取得できます。
message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
これらの変数は、build_name()
コマンドよりも詳細かつ明確な情報を提供します。
旧バージョンのCMakeを使用している場合
もし、どうしても旧バージョンのCMakeを使用する必要がある場合は、build_name()
コマンドを使用することができます。
しかし、上記で説明したように、このコマンドは非推奨であり、代わりにCMAKE_SYSTEM
とCMAKE_CXX_COMPILER
変数を使用することを強く推奨します。
build_name()
コマンドは、CMake 3.6以降で非推奨となっています。
# CMake 3.5 以下でのみ使用可能
cmake_minimum_required(VERSION 3.0)
project(myproject)
build_name(build_name)
message(STATUS "Detected build name: ${build_name}")
-- Detecting build name...
-- Detected build name: Darwin-clang
注意: このコードは、CMake 3.6以降では非推奨です。
cmake_minimum_required(VERSION 3.0)
project(myproject)
message(STATUS "CMAKE_SYSTEM: ${CMAKE_SYSTEM}")
message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
このコードを実行すると、以下の出力が得られます。
-- Building in: /home/user/myproject
-- Detected CMake version: 3.21
-- Detected project name: myproject
-- Detected build type: Release
-- Compiling using: /usr/bin/clang++
-- Building with: GNU Make 4.3
--
-- CMake_SYSTEM: Darwin
-- CMAKE_CXX_COMPILER: /usr/bin/clang++
このコードは、build_name()
コマンドよりも詳細かつ明確な情報を提供します。
このコマンドの代替方法は、以下の2つがあります。
CMAKE_SYSTEMとCMAKE_CXX_COMPILER変数を使用する
詳細
CMAKE_CXX_COMPILER
変数は、使用しているC++コンパイラに関する情報を提供します。CMAKE_SYSTEM
変数は、使用しているプラットフォームに関する情報を提供します。
例
cmake_minimum_required(VERSION 3.0)
project(myproject)
message(STATUS "CMAKE_SYSTEM: ${CMAKE_SYSTEM}")
message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
出力例
-- CMake_SYSTEM: Darwin
-- CMAKE_CXX_COMPILER: /usr/bin/clang++
プラットフォームとコンパイラ情報を手動で結合する
詳細
- 上記の情報を使用して、プラットフォームとコンパイラの情報を手動で結合します。
CMAKE_CXX_COMPILER
変数を使用して、使用しているC++コンパイラを取得します。CMAKE_C_COMPILER
変数を使用して、使用しているCコンパイラを取得します。CMAKE_SYSTEM_PROCESSOR
変数を使用して、使用しているプロセッサアーキテクチャを取得します。
例
cmake_minimum_required(VERSION 3.0)
project(myproject)
string(CONCAT build_name ${CMAKE_SYSTEM}-${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_C_COMPILER}-${CMAKE_CXX_COMPILER})
message(STATUS "Detected build name: ${build_name}")
出力例
-- Detected build name: Darwin-x86_64-clang-clang++
どちらの方法を選択するべきか
- より詳細な情報を取得したい場合は、プラットフォームとコンパイラ情報を手動で結合する方法を選択してください。
- より簡潔な方法で、プラットフォームとコンパイラの基本的な情報を取得したい場合は、CMAKE_SYSTEMとCMAKE_CXX_COMPILER変数を使用する方法がおすすめです。
CMAKE_SYSTEM
とCMAKE_CXX_COMPILER
変数は、常に正確な情報を提供するとは限りません。build_name()
コマンドは、CMake 3.6以降では非推奨であり、将来的に削除される可能性があります。