Bagaimana untuk Mengkonfigurasi Bendera Pengkompil dengan Cekap dalam Projek CMake Berbilang Sasaran?

Linda Hamilton
Lepaskan: 2024-11-01 19:43:30
asal
521 orang telah melayarinya

How to Efficiently Configure Compiler Flags in Multi-Target CMake Projects?

Konfigurasi Bendera Pengkompil yang Cekap dalam Projek CMake Merentas Platform

Menetapkan Pilihan Pengkompil untuk Penyusun dan Konfigurasi Berbeza

Untuk menangani kebimbangan anda tentang menetapkan pilihan pengkompil untuk penyusun dan konfigurasi yang berbeza, berikut ialah pendekatan yang dikemas kini dan dipertingkatkan:

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

Penambahbaikan:

  • Menggunakan sintaks ekspresi penjana CMake yang diperkenalkan dalam CMake 3.8, yang lebih ringkas dan lebih ringkas.
  • Mengambil kesempatan daripada fungsi add_compile_options(), yang membolehkan anda menentukan pilihan pengkompil dengan cara yang jelas dan boleh dibaca.
  • Mengalih keluar keperluan untuk menetapkan CMAKE_CXX_FLAGS secara manual dan pembolehubah serupa.
  • Menentukan ciri C menggunakan target_compile_features() dan bukannya menetapkan standard C secara eksplisit.

Projek CMake Berbilang Sasaran

Untuk menangani keinginan anda untuk projek berbilang sasaran di mana setiap pengkompil dan konfigurasi mempunyai sasarannya sendiri, anda boleh menggunakan pendekatan berikut:

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

Penambahbaikan:

  • Mencipta berbilang sasaran dengan nama unik berdasarkan gabungan pengkompil dan konfigurasi.
  • Konfigurasikan bendera pengkompil dan ciri C untuk setiap sasaran secara berasingan.

Amalan Terbaik dan Bacaan Lanjut

Berikut adalah beberapa sumber tambahan yang mungkin membantu:

  • [Tutorial CMake: Pelbagai Sasaran](https://www.cmake.org/cmake-docs/latest/manual/cmake-tutorial/MultipleTargets.html )
  • [Panduan Pembungkusan dan Penerapan CMake](https://cmake.org/cmake-docs/latest/manual/cmake-packaging.html#packaging-multiple-projects-in-a-single-project )

Atas ialah kandungan terperinci Bagaimana untuk Mengkonfigurasi Bendera Pengkompil dengan Cekap dalam Projek CMake Berbilang Sasaran?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!