Rumah > pembangunan bahagian belakang > C++ > 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
Lepaskan: 2024-11-03 01:08:02
asal
666 orang telah melayarinya

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan