Um Ihre Bedenken bezüglich der Festlegung von Compiler-Optionen auszuräumen Für verschiedene Compiler und Konfigurationen gibt es hier einen aktualisierten und verbesserten Ansatz:
<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>
Verbesserungen:
Um Ihren Wunsch nach einem zu erfüllen Bei einem Projekt mit mehreren Zielen, bei dem jeder Compiler und jede Konfiguration ein eigenes Ziel hat, können Sie den folgenden Ansatz verwenden:
<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>
Verbesserungen:
Hier sind einige zusätzliche Ressourcen, die hilfreich sein können:
Das obige ist der detaillierte Inhalt vonWie konfiguriere ich Compiler-Flags in CMake-Projekten mit mehreren Zielen effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!