Cet article fournit des conseils sur la définition des indicateurs du compilateur dans CMake multiplateforme projets. Il répond aux préoccupations soulevées concernant l'approche existante et explore des méthodologies améliorées.
L'approche précédente utilisait set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}..."), qui peut être remplacé par append(CMAKE_CXX_FLAGS "..."). De plus, les « expressions génératrices sales » peuvent être utilisées pour introduire des conditions et lister les options de manière concise :
<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>
Pour une compatibilité ascendante, une syntaxe alternative utilisant add_compile_options () peut être utilisé :
<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>
Au lieu de spécifier manuellement la norme C, CMake moderne s'appuie sur la spécification des fonctionnalités requises :
<code class="cmake">target_compile_features(HelloWorld PUBLIC cxx_lambda_init_captures)</code>
Cela permet à CMake de déterminer les indicateurs de compilateur nécessaires pour prendre en charge la fonctionnalité.
Pour éviter des répertoires de construction séparés pour chaque compilateur et configuration, un script wrapper peut compilez plusieurs configurations avec un IDE comme Visual Studio ou un générateur CMake multi-configuration.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!