クロスプラットフォーム CMake プロジェクトでコンパイラー フラグを設定する最新の方法
CMake ジェネレーター式を使用したエレガントなソリューション
あなたのアプローチは有効ですが、最新の CMake は、CMake のジェネレーター式を使用して、より簡潔で堅牢なソリューションを提供します。
cmake_minimum_required(VERSION 3.8) project(HelloWorld) string( APPEND _opts "$<IF:$<CXX_COMPILER_ID:MSVC>," "/W4;$<$<CONFIG:RELEASE>:/O2>," "-Wall;-Wextra;-Werror;" "$<$<CONFIG:RELEASE>:-O3>" "$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>" ">" ) add_compile_options("${_opts}")
元のアプローチと比較して、このメソッドは以下を利用します。
手動フラグ設定の非推奨
お気づきのとおり、CMAKE_CXX_FLAGS および同様の変数を手動で設定することは一般的に推奨されません。代わりに、add_compile_options() 関数を使用して、グローバル フラグを変更せずにオプションを追加することをお勧めします。
マルチターゲット プロジェクトのセットアップ
同じディレクトリにある場合は、CMake のターゲット プロパティを使用できます。
add_executable(HelloWorld_Debug_Clang HelloWorld.cpp) target_compile_options(HelloWorld_Debug_Clang PRIVATE "-std=c++1z;-W4") target_link_libraries(HelloWorld_Debug_Clang PRIVATE libc++) add_executable(HelloWorld_Release_Gcc HelloWorld.cpp) target_compile_options(HelloWorld_Release_Gcc PRIVATE "-std=c++1z;-W3") target_link_libraries(HelloWorld_Release_Gcc PRIVATE libstdc++)
このアプローチにより、単一のプロジェクト ファイルを維持しながら、ターゲットごとに異なるコンパイラ オプションを指定できます。
Modern Best実践方法
以上がジェネレーター式を使用してクロスプラットフォーム CMake プロジェクトでコンパイラー フラグを設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。