🛠️
CMake基本コマンドメモ
CMakeの基本コマンドのメモ。
自分用。
実行
Makeの場合
設定時にRelease, Debugを指定
cmake -S . -B build -G "Unix Makefiles" -D CMAKE_CXX_COMPILER=g++ -D CMAKE_BUILD_TYPE=<config_type>
cmake --build build
<config_type>=<Release|Debug|...>
Ninja Multi-Configの場合
ビルド時にRelease, Debugを指定
cmake -S . B build -G "Ninja Multi-Config" -D CMAKE_CXX_COMPILER=g++
cmake --build build --config <config_type>
基本設定
cmake_minimum_required(VERSION 4.0.3)
project(projectName
LANGUAGES CXX
VERSION 1.0.0
)
コンパイラオプション
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-g3 -O0 -DDEBUG")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
CMAKE_CXX_STANDARD_REQUIRED ON
: 標準をコンパイラがサポートしない場合に異常終了
CMAKE_CXX_EXTENSIONS OFF
: コンパイラの独自拡張を無効化
CMAKE_EXPORT_COMPILE_COMMANDS ON
: ビルドログ取得
依存関係の設定
実行可能ファイルが依存するソース
add_executable(targetName source1 [source2 ...])
ライブラリが依存するソース
add_library(targetName
[STATIC|SHARED|MODULE]
[EXCLUDE_FROM_ALL]
source1 [source2 ...])
STATIC
: 静的ライブラリ
SHARED
: 共有ライブラリ
MODULE
: 動的ロード
EXCLUDE_FROM_ALL
: メインのターゲットにリンクされるときだけビルド
ターゲットが依存するライブラリ
target_link_libraries(targetName
<PRIVATE|PUBLIC|INTERFACE> item1 [item2 ...]
<PRIVATE|PUBLIC|INTERFACE> item3 [item4 ...]
)
PRIVATE
: ターゲットの実装が依存
PUBLIC
: ターゲットの実装とクライアントコードが依存
INTERFACE
: ターゲットのクライアントコードが依存
外部ライブラリ
標準パスにインストールされている場合
find_package(Qt5 5.9 REQUIRED Gui Widgets Network)
target_link_libraries(targetName PRIVATE
Qt5::Gui
Qt5::Widgets
Qt5::Network
)
GitHubから取り込む場合
include(FetchContent)
set(FETCHCONTENT_UPDATES_DISCONNECTED ON)
set(FETCHCONTENT_QUIET OFF)
FetchContent_Declare(ftxui
GIT_REPOSITORY https://github.com/arthursonzogni/ftxui.git
GIT_TAG v5.0.0
GIT_PROGRESS TRUE
GIT_SHALLOW TRUE
EXCLUDE_FROM_ALL
)
FetchContent_MakeAvailable(ftxui)
target_link_libraries(targetName PRIVATE ftxui::screen)
FETCHCONTENT_UPDATES_DISCONNECTED ON
: コンパイル時にアップデートしない
FETCHCONTENT_QUIET OFF
: ダウンロード時のログを出力
GIT_SHALLOW TRUE
: シャロークローン
小技
ソースの自動リストアップ
file(targetName SOURCE_LIST CONFIGURE_DEPENDS "src/*.h", "src/*.cpp")
add_executable(sample ${SOURCE_LIST})
参考
Professional CMake 21st Edition, Craig Scott
ftxui-starter
Theoride Technology 実践C++応用講座CMake編
Discussion