Pour répondre à vos préoccupations concernant la définition des options du compilateur pour différents compilateurs et configurations, voici une approche mise à jour et améliorée :
<code class="cmake">cmake_minimum_required(VERSION 3.15) project(HelloWorld) string( APPEND CXX_FLAGS "$<IF:$<CXX_COMPILER_ID:MSVC>," "/W4;$<$<CONFIG:RELEASE>:/O2>," "-Wall;-Wextra;-Werror;" "$<$<CONFIG:RELEASE>:-O3>" "$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>" ">" ) add_compile_options("${CXX_FLAGS}") add_executable(HelloWorld "main.cpp") target_compile_features(HelloWorld PUBLIC cxx_lambda_init_captures)</code>
Améliorations :
Pour répondre à votre désir d'un projet multi-cible où chaque compilateur et configuration a sa propre cible, vous pouvez utiliser l'approche suivante :
<code class="cmake">cmake_minimum_required(VERSION 3.15) project(HelloWorld) set(COMPILERS MSVC Clang GNU) set(CONFIGURATIONS Debug Release) foreach(_compiler IN LISTS COMPILERS) foreach(_config IN LISTS CONFIGURATIONS) add_executable(HelloWorld_${_compiler}_${_config} "main.cpp") # Set compiler flags for this target target_compile_options(HelloWorld_${_compiler}_${_config} PUBLIC "$<IF:$<CXX_COMPILER_ID:${_compiler}>," "/W4;$<$<CONFIG:${_config}>:/O2>," "-Wall;-Wextra;-Werror;" "$<$<CONFIG:${_config}>:-O3>" "$<$<CXX_COMPILER_ID:Clang>:-stdlib=libc++>" ">" ) # Set C++ feature requirements for this target target_compile_features(HelloWorld_${_compiler}_${_config} PUBLIC cxx_lambda_init_captures) endforeach() endforeach()</code>
Améliorations :
Voici quelques ressources supplémentaires qui peuvent être utiles :
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!