コンテンツにスキップ

最終更新:2026-10-12

CMake 入門と実践

CMake の常用必須その一

1.コンパイラ flags の設定

例:C++ 標準の設定、すべての警告の表示。

set(CMAKE_CXX_FLAGS "-std=c++0x -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -Wall")
add_compile_options("$<$<STREQUAL:$<TARGET_PROPERTY:LINKER_LANGUAGE>,CXX>:-std=c++11>")

さらに、いくつかの最適化 flags を設定することもできます。

公式資料:https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

例えば:

-O0, -O1, -O2, -O3

llvm を使用する場合は、ここを参照するとよいでしょう:

https://clang.llvm.org/docs/DiagnosticsReference.html

2.ソースファイル属性の設定

これは CMake の複雑な属性の一つです。複数のターゲットが存在する場合、あるターゲットの挙動の一部を変更する必要があるかもしれません。例えば、main.cpp を C++11 でビルドし、ライブラリについては C++14 でビルドしたい場合などです。このような場合、set_source_files_properties コマンドを使用して、特定のソースファイルの属性を次のように設定できます:

cmakeCopy code
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/*.cpp PROPERTIES COMPILE_FLAGS "-std=c++11")

以下のマニュアルでは非常に多くの属性を確認でき、各属性を特定のニーズに合わせて使用できます。

https://cmake.org/cmake/help/v3.3/manual/cmake-properties.7.html#source-file-properties

3.リンカフラグ

以下は GNU GCC リンカのリンカフラグのリストです。

GNU GCC リンクオプション

https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

GCC リンカはデフォルトで、環境変数で定義されたディレクトリ(/usr/lib;/usr/local/lib)の中を検索し、その後デフォルトで標準ライブラリをリンクします。

最もよく使われるフラグの一つは -l で、必要なライブラリをリンクするために使われます。例:-lzlib、-lboost など。

他にも、実行ファイルのリンクオプションの挙動を変更するのに役立つ追加フラグがあります。

以下は、リンカフラグを追加できる変数です:

  • CMAKE_EXE_LINKER_FLAGS:実行ファイルを作成する際にリンカが使用するフラグ
  • CMAKE_EXE_LINKER_FLAGS_RELEASE:リリース版実行ファイルを作成する際にリンカが使用するフラグ
  • CMAKE_EXE_LINKER_FLAGS_DEBUG:デバッグ版実行ファイルを作成する際にリンカが使用するフラグ
  • CMAKE_STATIC_LINKER_FLAGS:静的ライブラリ(.a、.lib)を作成する際にリンカが使用するフラグ
  • CMAKE_SHARED_LINKER_FLAGS:共有ライブラリ(.so、.dll)を作成する際にリンカが使用するフラグ
  • CMAKE_MODULE_LINKER_FLAGS:モジュールライブラリを作成する際にリンカが使用するフラグ

例えば、次のコードでリンカフラグを追加できます:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl")

これらのフラグの使い方を理解することで、実行ファイルのリンクの挙動をよりよく制御できるようになります。

4.Debug と Release パッケージ

CMakeLists.txt ファイルの内部では、CMAKE_BUILD_TYPE にアクセスできます。CMakeLists.txt の中でビルドタイプを簡単にチェックできます:

if(${CMAKE_BUILD_TYPE} MATCHES Debug)
    message("Debug Build")
elseif(${CMAKE_BUILD_TYPE} MATCHES Release)
    message("Release Build")
endif()

また、前のセクションで示した設定変数を使用して、ビルドタイプごとにコンパイラとリンカのフラグを設定することもできます:

  • CMAKE_EXE_LINKER_FLAGS_RELEASE:リリース版実行ファイルを作成するためのフラグ
  • CMAKE_EXE_LINKER_FLAGS_DEBUG:デバッグ版実行ファイルを作成するためのフラグ
  • CMAKE_CXX_FLAGS_RELEASE
  • CMAKE_CXX_FLAGS_DEBUG

関連トピック

コメント