Dengan CMake, umumnya disarankan untuk melakukan build "out of source" . Buat Anda CMakeLists.txt
di root proyek Anda. Kemudian dari akar proyek Anda:
mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ..
make
Dan untuk Debug
(lagi dari akar proyek Anda):
mkdir Debug
cd Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
Release
Saya Debug
akan menambahkan flag yang sesuai untuk kompiler Anda. Ada juga RelWithDebInfo
dan MinSizeRel
membangun konfigurasi.
Anda dapat memodifikasi / menambahkan ke flag dengan menentukan file toolchain di mana Anda dapat menambahkan CMAKE_C_FLAGS_DEBUG
dan CMAKE_C_FLAGS_RELEASE
variabel, misalnya:
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Wall")
Lihat CMAKE_BUILD_TYPE untuk detail lebih lanjut.
Adapun pertanyaan ketiga Anda, saya tidak yakin persis apa yang Anda tanyakan. CMake akan secara otomatis mendeteksi dan menggunakan kompiler yang sesuai untuk file sumber Anda yang berbeda.
cmake -i ..
sebaliknya, jadi cmake akan berjalan secara interaktif, menanyakan jenis bangunan yang Anda inginkan (Tidak Ada, Rilis, Debug, MinSizeRel, RelWithDebInfo).-i
hasil pilihan dalam pesan kesalahan ini:The "cmake -i" wizard mode is no longer supported.
. Saya menggunakan cmake 3.7.13.0.0
. Referensi .CMAKE_BUILD_TYPE
tidak disetel, cmake tidak akan memilih tipe build default, maka baris perintah kompiler yang dihasilkan tidak akan cocok dengan konfigurasi build apa pun.Untuk debug / lepaskan flag, lihat
CMAKE_BUILD_TYPE
variabelnya (Anda anggap sebagaicmake -DCMAKE_BUILD_TYPE=value
). Dibutuhkan nilai-nilai sepertiRelease
,Debug
, dllhttps://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables#compilers-and-tools
cmake menggunakan ekstensi untuk memilih kompiler, jadi cukup beri nama file Anda .c.
Anda dapat menimpanya dengan berbagai pengaturan:
Sebagai contoh:
Akan mengkompilasi file .c dengan g ++. Tautan di atas juga menunjukkan cara memilih kompiler spesifik untuk C / C ++.
sumber
Alih-alih memanipulasi
CMAKE_CXX_FLAGS
string secara langsung (yang bisa dilakukan dengan lebih baik menggunakanstring(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3")
btw), Anda dapat menggunakanadd_compiler_options
:Ini akan menambahkan peringatan yang ditentukan untuk semua tipe build, tetapi hanya flag debugging yang diberikan untuk
DEBUG
build. Perhatikan bahwa opsi kompilasi disimpan sebagai daftar CMake, yang hanya berupa string yang memisahkan elemen-elemennya dengan titik koma;
.sumber
list(APPEND CMAKE_CXX_FLAGS_DEBUG "-g3")
menambahkan titik koma sebelum -g3 menghentikan perintah dan memulai perintah baru -g3 yang pasti akan gagal?CMAKE_CXX_FLAGS
adalah tidak daftar cmake tapi string bendera baris perintah yang dipisahkan oleh spasi. Saya menemukan bahwa perilaku tidak konsisten ...Jika Anda ingin membangun konfigurasi yang berbeda tanpa membuat ulang jika menggunakan Anda juga dapat menjalankan
cmake --build {$PWD} --config <cfg>
Untuk alat multi-konfigurasi, pilih<cfg>
ex. Debug, Rilis, MinSizeRel, RelWithDebInfohttps://cmake.org/cmake/help/v2.8.11/cmake.html#opt%3a--builddir
sumber
--config
opsi tanpa hasil. Itu tidak mempengaruhi$<CONFIG>
variabel seperti-DCMAKE_BUILD_TYPE=
halnya.// CMakeLists.txt: rilis
// CMakeLists.txt: debug
sumber
CMAKE_CONFIGURATION_TYPES
berisi nilai yang mungkin untukCMAKE_BUILD_TYPE
. Jadi, Anda harus mengatur yang terakhir sebagai jawaban lain yang disarankan. Mungkin solusi Anda berhasil karena membatasi pilihan yang mungkin ada pada yang ingin Anda miliki.