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_SYSTEMCMAKE_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_SYSTEMCMAKE_CXX_COMPILER変数は、常に正確な情報を提供するとは限りません。
  • build_name()コマンドは、CMake 3.6以降では非推奨であり、将来的に削除される可能性があります。