Heim > Backend-Entwicklung > C++ > Wie modernisiere ich Compiler-Flag-Einstellungen in plattformübergreifenden CMake-Projekten?

Wie modernisiere ich Compiler-Flag-Einstellungen in plattformübergreifenden CMake-Projekten?

Linda Hamilton
Freigeben: 2024-11-03 11:08:30
Original
366 Leute haben es durchsucht

How to Modernize Compiler Flag Settings in Cross-Platform CMake Projects?

Moderne Möglichkeiten zum Festlegen von Compiler-Flags in plattformübergreifenden CMake-Projekten

Einführung

Dieser Artikel enthält Anleitungen zum Festlegen von Compiler-Flags in plattformübergreifenden CMake Projekte. Es geht auf Bedenken hinsichtlich des bestehenden Ansatzes ein und untersucht verbesserte Methoden.

Verbesserte Syntax mit Generatorausdrücken

Der vorherige Ansatz verwendete set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ..."), was dies kann durch append(CMAKE_CXX_FLAGS "...") ersetzt werden. Darüber hinaus können die „Dirty Generator Expressions“ verwendet werden, um Bedingungen einzuführen und Optionen prägnant aufzulisten:

<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>
Nach dem Login kopieren

Abwärtskompatibler Ansatz mit add_compile_options()

Für Abwärtskompatibilität alternative Syntax mit add_compile_options () kann verwendet werden:

<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>
Nach dem Login kopieren

Funktionsbasierter Ansatz mit target_compile_features()

Anstatt den C-Standard manuell anzugeben, verlässt sich modernes CMake auf die Angabe erforderlicher Funktionen:

<code class="cmake">target_compile_features(HelloWorld PUBLIC cxx_lambda_init_captures)</code>
Nach dem Login kopieren

Dadurch kann CMake die notwendigen Compiler-Flags zur Unterstützung der Funktion ermitteln.

Build-Umgebungen mit mehreren Konfigurationen

Um separate Build-Verzeichnisse für jeden Compiler und jede Konfiguration zu vermeiden, kann ein Wrapper-Skript dies tun Kompilieren Sie mehrere Konfigurationen mit einer IDE wie Visual Studio oder einem CMake-Generator für mehrere Konfigurationen.

Das obige ist der detaillierte Inhalt vonWie modernisiere ich Compiler-Flag-Einstellungen in plattformübergreifenden CMake-Projekten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage