Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memodenkan Tetapan Bendera Pengkompil dalam Projek CMake Merentas Platform?

Bagaimana untuk Memodenkan Tetapan Bendera Pengkompil dalam Projek CMake Merentas Platform?

Linda Hamilton
Lepaskan: 2024-11-03 11:08:30
asal
366 orang telah melayarinya

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

Cara Moden untuk Menetapkan Bendera Pengkompil dalam Projek CMake Merentas Platform

Pengenalan

Artikel ini memberikan panduan tentang menetapkan bendera pengkompil dalam CMake merentas platform projek. Ia menangani kebimbangan yang dibangkitkan tentang pendekatan sedia ada dan meneroka metodologi yang dipertingkatkan.

Sintaks yang Diperbaiki dengan Ungkapan Penjana

Set pendekatan yang digunakan sebelumnya(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ..."), yang boleh digantikan dengan append(CMAKE_CXX_FLAGS "..."). Selain itu, "ungkapan penjana kotor" boleh digunakan untuk memperkenalkan syarat dan pilihan senarai secara ringkas:

<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>
Salin selepas log masuk

Pendekatan Serasi Ke Belakang dengan add_compile_options()

Untuk keserasian ke belakang, sintaks alternatif menggunakan add_compile_options () boleh digunakan:

<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>
Salin selepas log masuk

Pendekatan Berasaskan Ciri dengan target_compile_features()

Daripada menentukan standard C secara manual, CMake moden bergantung pada penetapan ciri yang diperlukan:

<code class="cmake">target_compile_features(HelloWorld PUBLIC cxx_lambda_init_captures)</code>
Salin selepas log masuk

Ini membolehkan CMake menentukan bendera pengkompil yang diperlukan untuk menyokong ciri.

Persekitaran Binaan Berbilang Konfigurasi

Untuk mengelakkan direktori binaan berasingan bagi setiap pengkompil dan konfigurasi, skrip pembalut boleh susun berbilang konfigurasi dengan IDE seperti Visual Studio atau penjana CMake berbilang konfigurasi.

Atas ialah kandungan terperinci Bagaimana untuk Memodenkan Tetapan Bendera Pengkompil dalam Projek CMake Merentas Platform?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan