CMake コマンドメモ

CMake に関する記述メモ
やりたい内容からの逆引きでメモ化しています。


コマンドライン

ツールチェイン情報を渡す

コンパイルオプションなど共通で使う情報を別途渡したいときに。
実際に処理しようとする cmake の前にあらかじめ実行してくれるので、設定を各cmake側に記述する必要がなくなる。

-DCMAKE_TOOLCHAIN_FILE=<file.cmake>

複数の Config を扱える Ninja ビルドを指定する

こちらを使うと Ninja ビルドでも Visual Studio と同じようにビルド時に Config 指定できるようになる。
利用環境によってはこちらのほうが便利かもしれない。

-G "Ninja Multi-Config"

Config 設定

Config のタイプを列挙する

たとえば Config として、Debug/Develop/Profile/Release の4つを定義したいとき

SET(CMAKE_CONFIGURATION_TYPES "Debug;Develop;Profile;Release" CACHE STRING "" FORCE)

Config のタイプごとの設定

Config のタイプを大文字にして _<タイプ名> のようにくっつける

Develop に対してオプションを追加する場合の例

SET(CMAKE_CXX_FLAGS_DEVELOP ... )
SET(CMAKE_EXE_LINKER_FLAGS_DEVELOP ... )
SET(CMAKE_MODULE_LINKER_FLAGS_DEVELOP ... )
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEVELOP ... )
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEVELOP ... )

CMake記述

サブディレクトリの追加

add_subdirectory を使う。
一連の cmake 処理の中で複数回同じ project を追加しようとするとエラーになるので、多階層で構築する場合は要注意

add_subdirectory( ${CMAKE_CURRENT_SOURCE_DIR}/../libhoge/ ${CMAKE_CURRENT_BINARY_DIR}/libhoge

インクルードディレクトリの指定

target_include_directories 使う。
PUBLIC 指定した場合は add_subdirectory されたときに呼び出し元も使えるようになる。
使わせたくないときは PRIVATE で。

target_include_directories( libhoge
  PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/include
)

リンクするライブラリのディレクトリの指定

target_link_directories 使う。

target_link_directories(
  ${CMAKE_CURRENT_SOURCE_DIR}/../libhoge/lib/$
)

リンクするライブラリの指定

target_link_libraries を使う。

target_link_libraries(exehuga
  PRIVATE
    libhoge
)

Config のタイプでMSVCのランタイムライブラリを切り替える

CMAKE_MSVC_RUNTIME_LIBRARY を Generator Expression を使って記述する
Generate は直前評価してくれるので、Config 指定に応じて適切に切り替えてくれる

Debug/Develop の時にはデバッグ版ランタイムライブラリを使ってほしいとき

SET(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<OR:$<CONFIG:Debug>,$<CONFIG:Develop>>:Debug>DLL")


メモ一覧に戻る
メニューに戻る