最終更新: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
例えば:
llvm を使用する場合は、ここを参照するとよいでしょう:
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 リンカのリンカフラグのリストです。
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
関連トピック¶
- Bazel で C++ プロジェクトをビルド | C++那些事
- Bazel と LLDB の連携デバッグ | C++那些事
- Conan C++ パッケージ管理入門 | C++那些事
- C++ Insights によるコンパイル期観察 | C++那些事
- C++ Jupyter Notebook インタラクティブ | C++那些事
- C++ string から int への変換 | C++那些事
- C++ dbg-macro デバッグマクロ | C++那些事
- GCC コンパイルオプション詳解 | C++那些事
- GDB で C++ プログラムをデバッグ | C++那些事
- GDB Python 拡張デバッグ | C++那些事