Bagaimana cara menetapkan variabel preprosesor melalui CMake?
Kode yang setara akan menjadi #define foo
.
sumber
Bagaimana cara menetapkan variabel preprosesor melalui CMake?
Kode yang setara akan menjadi #define foo
.
Untuk waktu yang lama, CMake memiliki add_definitions
perintah untuk tujuan ini. Namun, baru-baru ini perintah telah digantikan oleh pendekatan berbutir lebih halus (perintah terpisah untuk definisi kompilasi, termasuk direktori, dan opsi kompiler).
Contoh menggunakan add_compile_definitions baru :
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION})
add_compile_definitions(WITH_OPENCV2)
Atau:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION} WITH_OPENCV2)
Bagian yang baik tentang ini adalah bahwa hal itu menghindari tipu daya kumuh CMake di tempat untuk add_definitions
. CMake adalah sistem yang buruk, tetapi mereka akhirnya menemukan kewarasan.
Temukan penjelasan lebih lanjut tentang perintah mana yang digunakan untuk flag kompiler di sini: https://cmake.org/cmake/help/latest/command/add_definitions.html
Demikian juga, Anda dapat melakukan ini per-target seperti yang dijelaskan dalam jawaban Jim Hunziker.
add_compile_definitions
melemparCMake Error at CMakeLists.txt:6 (add_compile_definitions): Unknown CMake command "add_compile_definitions".
. Harus digunakanadd_compile_options(-D <your-def>)
sebagai gantinya.cmake -D CMAKE_CXXFLAGS='-DDEBUG_CHESSBOARD'
(tidak diuji)https://cmake.org/cmake/help/v3.17/command/add_compile_definitions.html#command:add_compile_definitions
dan mulai mengubah nomor versi ke bawah hingga halaman hilang. Itu akan menjadi versi di mana itu belum ada. Pada langkah selanjutnya Anda dapat pergi keWhats new
bagian untuk menemukan perintah atau fitur baru. Jadi tidak begitu sulit.Untuk melakukan ini untuk target tertentu, Anda dapat melakukan hal berikut:
Anda harus melakukan ini jika Anda memiliki lebih dari satu target yang sedang Anda bangun dan Anda tidak ingin mereka semua menggunakan bendera yang sama. Lihat juga dokumentasi resmi tentang target_compile_definitions .
sumber
target_compile_definitions(my_target PRIVATE FOO=1)
bedanyaset_source_files_properties(foo.cpp PROPERTIES COMPILE_DEFINITIONS -DFOO=1)
?target_compile_definitions
set nilai untuk WHOLE executable / library, di mana 'set_source_files_properties` menetapkan nilai hanya untuk file yang ditentukan. Perintah terakhir memungkinkan file dikompilasi menggunakan bahasa yang berbeda; yaitu:set_source_files_properties(compile_me_as_objc.c PROPERTIES -x objective-c
. Perhatikan bahwa-x objective-c
ini adalah flag khusus untuk GCC / Dentang.Dengan CMake versi 3.3.2, untuk membuat
Saya perlu menggunakan:
dan, untuk memiliki definisi makro preprosesor seperti yang lain ini:
garis sangat dimodifikasi:
sumber
add_definitions()
atautarget_compile_definitions()
. Perintah yang lebih modernadd_compile_definitions()
,, tidak ditambahkan sampai CMake 3.12. @ Leos313