ツールチェイン情報を渡す
コンパイルオプションなど共通で使う情報を別途渡したいときに。
実際に処理しようとする cmake の前にあらかじめ実行してくれるので、設定を各cmake側に記述する必要がなくなる。
-DCMAKE_TOOLCHAIN_FILE=<file.cmake>
コンパイルオプションなど共通で使う情報を別途渡したいときに。
実際に処理しようとする cmake の前にあらかじめ実行してくれるので、設定を各cmake側に記述する必要がなくなる。
-DCMAKE_TOOLCHAIN_FILE=<file.cmake>
こちらを使うと Ninja ビルドでも Visual Studio と同じようにビルド時に Config 指定できるようになる。
利用環境によってはこちらのほうが便利かもしれない。
-G "Ninja Multi-Config"
たとえば Config として、Debug/Develop/Profile/Release の4つを定義したいとき
SET(CMAKE_CONFIGURATION_TYPES "Debug;Develop;Profile;Release" CACHE STRING "" FORCE)
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 ... )
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
)
CMAKE_MSVC_RUNTIME_LIBRARY を Generator Expression を使って記述する
Generate は直前評価してくれるので、Config 指定に応じて適切に切り替えてくれる
Debug/Develop の時にはデバッグ版ランタイムライブラリを使ってほしいとき
SET(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<OR:$<CONFIG:Debug>,$<CONFIG:Develop>>:Debug>DLL")