この記事では、クロスプラットフォーム CMake でコンパイラ フラグを設定するためのガイダンスを提供しますプロジェクト。これは、既存のアプローチに関して提起された懸念に対処し、改善された方法論を検討します。
以前のアプローチでは set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ...") が使用されていました。 append(CMAKE_CXX_FLAGS "...") に置き換えられます。さらに、「ダーティ ジェネレーター式」を利用して、条件を導入し、オプションを簡潔にリストすることができます。
<code class="cmake">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}")</code>
下位互換性のために、add_compile_options を使用した代替構文() を使用できます:
<code class="cmake">if(MSVC) add_compile_options("/W4" "$<$<CONFIG:RELEASE>:/O2>") else() add_compile_options("-Wall" "-Wextra" "-Werror" "$<$<CONFIG:RELEASE>:-O3>") if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") add_compile_options("-stdlib=libc++") else() # nothing special for gcc at the moment endif() endif()</code>
最新の CMake は、C 標準を手動で指定する代わりに、必要な機能の指定に依存しています:
<code class="cmake">target_compile_features(HelloWorld PUBLIC cxx_lambda_init_captures)</code>
これにより、CMake は機能をサポートするために必要なコンパイラ フラグを決定できます。
コンパイラと構成ごとに個別のビルド ディレクトリが必要になるのを避けるために、ラッパー スクリプトは次のことを行うことができます。 Visual Studio などの IDE またはマルチ構成 CMake ジェネレーターを使用して複数の構成をコンパイルします。
以上がクロスプラットフォーム CMake プロジェクトでコンパイラー フラグ設定を最新化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。