Maison >développement back-end >C++ >Comment définir des indicateurs de compilateur dans des projets CMake multiplateformes à l'aide d'expressions génératrices ?
Une manière moderne de définir des indicateurs de compilateur dans des projets CMake multiplateformes
Solution élégante utilisant des expressions de générateur CMake
Bien que votre approche soit valide, CMake moderne fournit une solution plus concise et robuste en utilisant les expressions génératrices de 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}")
Par rapport à votre approche originale, cette méthode exploite :
Dépréciation du réglage manuel des indicateurs
Comme vous l'avez remarqué, il est généralement déconseillé de définir manuellement CMAKE_CXX_FLAGS et des variables similaires. Au lieu de cela, préférez utiliser la fonction add_compile_options() pour ajouter des options sans modifier les indicateurs globaux.
Configuration de projet multi-cibles
Pour créer plusieurs cibles avec différentes options dans le même répertoire, vous pouvez utiliser les propriétés cible de 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++)
Cette approche vous permet de spécifier différentes options de compilateur pour chaque cible, tout en conservant un seul fichier de projet.
Modern Best Pratiques
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!