CMakeで コンパイラに渡すオプションの初期値を変更する方法です
CMakeの公式FAQに「正しい」方法が書いてあるので、その方法を紹介します
https://gitlab.kitware.com/cmake/community/-/wikis/FAQ
設定ファイルの作成
ファイル名はなんでもよいのですが、設定ファイルを二つ作成します。とりあえずFAQにならい、c_flag_overrides.cmake と cxx_flag_overrides.cmake というファイル名にします
この二つのファイルを CMakeLists.txt と同じディレクトリに保存します
c_flag_overrides.cmakeの中身は以下の通り
if(MSVC) set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") endif()
cxx_flag_overrides.cmakeの中身は以下の通り
if(MSVC) set(CMAKE_CXX_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") set(CMAKE_CXX_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") endif()
CMAKE_C_FLAGS_??? がC言語用のオプションの初期値、 CMAKE_CXX_FLAGS_???が C++用のオプションの初期値になります。
また _DEBUG_INIT はDEBUGビルド、_RELEASE_INIT はReleaseビルド、とリリース毎に初期値が指定できます。ここでいう「リリース」とはCMAKE_BUILD_TYPEで指定したものに対応します。
上記の例は if(MSVS)を使って、visual studioでビルドした場合だけ コンパイラオプションの初期値を変更するようにしています。GCCや Xcodeをつかう場合は適宜
if (APPLE) elseif (MSVC) elseif (LINUX) else() endif()
などで切り替えましょう
CmakeLists.txt の 編集
次に CMakeLists.txt を編集します
CMakeLists.txt には project(hogehoge)という行が必ずあります。「その行よりも前に」 以下のコードを追加します
set(CMAKE_USER_MAKE_RULES_OVERRIDE ${CMAKE_CURRENT_SOURCE_DIR}/c_flag_overrides.cmake) set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX ${CMAKE_CURRENT_SOURCE_DIR}/cxx_flag_overrides.cmake) project(hogehoge)
これで設定は完了です。
注意事項
cmakeは前回実行したcmakeの結果をキャッシュしてます。キャッシュに古い情報が残っていると、上記の編集結果が反映されません。