Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menetapkan Bendera Pengkompil dalam Projek CMake Merentas Platform Menggunakan Ungkapan Penjana?

Bagaimana untuk Menetapkan Bendera Pengkompil dalam Projek CMake Merentas Platform Menggunakan Ungkapan Penjana?

DDD
DDDasal
2024-11-03 01:08:02611semak imbas

How to Set Compiler Flags in Cross-Platform CMake Projects Using Generator Expressions?

Cara Moden untuk Menetapkan Bendera Pengkompil dalam Projek CMake Merentas Platform

Penyelesaian Elegan Menggunakan Ungkapan Penjana CMake

Walaupun pendekatan anda sah, CMake moden menyediakan penyelesaian yang lebih ringkas dan mantap menggunakan ungkapan penjana 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}")

Berbanding dengan pendekatan asal anda, kaedah ini memanfaatkan:

  • Ungkapan penjana untuk mentakrifkan pilihan pengkompil secara bersyarat berdasarkan pengkompil dan konfigurasi.
  • Perintah rentetan(APPEND ...) untuk mengumpul pilihan dalam senarai.
  • Fungsi add_compile_options() untuk tetapkan pilihan untuk semua sasaran.

Pemberhentian Tetapan Bendera Manual

Seperti yang anda perhatikan, biasanya tidak digalakkan untuk menetapkan CMAKE_CXX_FLAGS dan pembolehubah serupa secara manual. Sebaliknya, lebih suka menggunakan fungsi add_compile_options() untuk menambahkan pilihan tanpa mengubah suai bendera global.

Persediaan Projek Berbilang Sasaran

Untuk mencipta berbilang sasaran dengan pilihan berbeza dalam direktori yang sama, anda boleh menggunakan sifat sasaran CMake:

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++)

Pendekatan ini membolehkan anda menentukan pilihan pengkompil yang berbeza untuk setiap sasaran, sambil menyimpan satu fail projek.

Moden Terbaik Amalan

  • Gunakan ungkapan penjana CMake untuk tetapan bendera bersyarat.
  • Pilih add_compile_options() berbanding tetapan CMAKE_CXX_FLAGS secara manual.
  • Buat berbilang sasaran dengan pilihan pengkompil yang berbeza untuk keserasian merentas platform.
  • Gunakan skrip pembalut binaan untuk menjana berbilang konfigurasi daripada satu fail CMake.

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

Kenyataan:
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