Cara terbaik untuk menentukan sourcefile di CMake adalah dengan mendaftar secara eksplisit .
Pembuat CMake sendiri menyarankan untuk tidak menggunakan globbing.
Lihat: https://cmake.org/cmake/help/v3.15/command/file.html?highlight=glob#file
(Kami tidak menyarankan menggunakan GLOB untuk mengumpulkan daftar file sumber dari hierarki sumber Anda. Jika tidak ada file CMakeLists.txt yang berubah ketika sumber ditambahkan atau dihapus, sistem build yang dihasilkan tidak tahu kapan harus meminta CMake untuk membuat ulang.)
Tentu saja, Anda mungkin ingin tahu apa kerugiannya - baca terus!
Ketika Globbing Gagal:
Kerugian besar dari globbing adalah membuat / menghapus file tidak akan secara otomatis memperbarui sistem build.
Jika Anda adalah orang yang menambahkan file, ini mungkin merupakan trade-off yang dapat diterima, namun hal ini menyebabkan masalah bagi orang lain yang membangun kode Anda, mereka memperbarui proyek dari kontrol versi, menjalankan build, kemudian menghubungi Anda, mengeluh bahwa
"build's rusak".
Untuk membuat keadaan menjadi lebih buruk, kegagalan biasanya memberikan beberapa kesalahan penghubung yang tidak memberikan petunjuk apa pun tentang penyebab masalah dan waktu hilang pemecahan masalah itu.
Dalam sebuah proyek yang saya kerjakan, kami memulai globbing tetapi mendapat begitu banyak keluhan ketika file baru ditambahkan, bahwa itu adalah alasan yang cukup untuk secara eksplisit mendaftar file daripada globbing.
Ini juga memecah alur kerja git yang umum
( git bisect
dan beralih di antara cabang fitur).
Jadi saya tidak bisa merekomendasikan ini, masalah yang disebabkannya jauh melebihi kenyamanan, ketika seseorang tidak dapat membangun perangkat lunak Anda karena ini, mereka mungkin kehilangan banyak waktu untuk melacak masalah atau menyerah begitu saja.
Dan catatan lain, Hanya ingat untuk menyentuh CMakeLists.txt
tidak selalu cukup, dengan build otomatis yang menggunakan globbing, saya harus menjalankan cmake
sebelum setiap build karena file mungkin telah ditambahkan / dihapus sejak bangunan terakhir *.
Pengecualian terhadap aturan:
Ada saat-saat globbing lebih disukai:
- Untuk mengatur
CMakeLists.txt
file untuk proyek yang ada yang tidak menggunakan CMake.
Ini cara cepat untuk mendapatkan semua sumber yang direferensikan (setelah sistem build berjalan - ganti globbing dengan daftar file yang eksplisit).
- Ketika CMake tidak digunakan sebagai sistem build utama , jika misalnya Anda menggunakan proyek yang tidak menggunakan CMake, dan Anda ingin mempertahankan sistem build Anda sendiri untuk itu.
- Untuk setiap situasi di mana daftar file berubah begitu sering sehingga menjadi tidak praktis untuk dipelihara. Dalam hal ini bisa berguna, tetapi kemudian Anda harus menerima menjalankan
cmake
untuk menghasilkan file-file build setiap kali untuk mendapatkan build yang andal / benar (yang bertentangan dengan niat CMake - kemampuan untuk memisahkan konfigurasi dari gedung) .
* Ya, saya bisa menulis kode untuk membandingkan pohon file pada disk sebelum dan sesudah pembaruan, tetapi ini bukan solusi yang baik dan sesuatu yang lebih baik diserahkan kepada sistem build.