Heim >Backend-Entwicklung >C++ >Wie setze ich Compiler-Flags in plattformübergreifenden CMake-Projekten mithilfe von Generatorausdrücken?
Moderne Methode zum Setzen von Compiler-Flags in plattformübergreifenden CMake-Projekten
Elegante Lösung mit CMake-Generator-Ausdrücken
Während Ihr Ansatz gültig ist, bietet das moderne CMake eine präzisere und robustere Lösung mithilfe der Generatorausdrücke von 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}")
Im Vergleich zu Ihrem ursprünglichen Ansatz nutzt diese Methode Folgendes:
Abschaffung der manuellen Flag-Einstellung
Wie Sie bemerkt haben, wird generell davon abgeraten, CMAKE_CXX_FLAGS und ähnliche Variablen manuell festzulegen. Verwenden Sie stattdessen lieber die Funktion add_compile_options(), um Optionen anzuhängen, ohne die globalen Flags zu ändern.
Multi-Target-Projekteinrichtung
Um mehrere Ziele mit unterschiedlichen Optionen im zu erstellen Im selben Verzeichnis können Sie die Zieleigenschaften von CMake verwenden:
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++)
Dieser Ansatz ermöglicht es Ihnen, unterschiedliche Compileroptionen für jedes Ziel anzugeben und gleichzeitig eine einzige Projektdatei beizubehalten.
Modern Best Übungen
Das obige ist der detaillierte Inhalt vonWie setze ich Compiler-Flags in plattformübergreifenden CMake-Projekten mithilfe von Generatorausdrücken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!