Saya sedang mempertimbangkan untuk mengalihkan proyek lintas platform dari sistem manajemen build terpisah dalam Visual C ++, XCode dan makefiles ke CMake.
Salah satu fitur penting yang saya butuhkan adalah menambahkan secara otomatis semua file dalam direktori ke target. Walaupun ini mudah dilakukan dengan make, tidak mudah dilakukan dengan Visual C ++ dan XCode (koreksi saya jika saya salah). Apakah mungkin melakukannya secara langsung di CMake? Bagaimana?
c++
cross-platform
cmake
martjno
sumber
sumber
Jawaban:
Itu mungkin. Misalnya dengan
file(GLOB
:Perhatikan bahwa ini membutuhkan pengaktifan ulang secara manual
cmake
jika file sumber ditambahkan atau dihapus, karena sistem build yang dihasilkan tidak tahu kapan harus meminta CMake untuk melakukan regenerasi, dan melakukannya di setiap build akan menambah waktu build.sumber
GLOB
:file(GLOB_RECURSE variable [RELATIVE path] [FOLLOW_SYMLINKS] [globbing expressions]...)
.Jawaban oleh Kleist tentu berhasil, tetapi ada peringatan penting:
Saat Anda menulis
Makefile
secara manual, Anda mungkin membuatSRCS
variabel menggunakan fungsi untuk memilih semua.cpp
dan.h
file. Jika file sumber ditambahkan kemudian, menjalankan kembalimake
akan memasukkannya.Namun, CMake (dengan perintah seperti
file(GLOB ...)
) akan secara eksplisit menghasilkan daftar file dan menempatkannya di hasil otomatisMakefile
. Jika Anda memiliki file sumber baru, Anda harus membuatMakefile
ulang dengan menjalankan kembalicmake
.sunting: Tidak perlu menghapus Makefile.
sumber
Ekstensi untuk jawaban @leading :
Sejak CMake 3.12 opsi tambahan CONFIGURE_DEPENDS yang didukung oleh perintah
file(GLOB)
danfile(GLOB_RECURSE)
. Dengan pilihan ini tidak ada kebutuhan untuk secara manual kembali menjalankan CMake setelah penambahan / penghapusan file sumber dalam direktori - CMake akan kembali dijalankan secara otomatis pada berikutnya membangun proyek.Namun, opsi CONFIGURE_DEPENDS menyiratkan bahwa direktori yang sesuai akan diperiksa ulang setiap kali membangun diminta, sehingga proses pembangunan akan menghabiskan lebih banyak waktu daripada tanpa CONFIGURE_DEPENDS .
Bahkan dengan opsi CONFIGURE_DEPENDS tersedia, dokumentasi CMake masih tidak merekomendasikan penggunaan
file(GLOB)
ataufile(GLOB_RECURSE)
untuk mengumpulkan sumber.sumber
file(GLOB)
ataufile(GLOB_RECURSE)
untuk mengumpulkan sumber" Apa yang mereka rekomendasikan? Menggunakan sesuatu yang lain untuk mengumpulkan sumber atau mendaftar secara manual setiap file sumber tunggal?Jadi Mengapa tidak menggunakan PowerShell untuk membuat daftar file sumber untuk Anda. Lihatlah skrip ini
Misalkan Anda memiliki folder dengan struktur ini
Sekarang simpan file ini sebagai "generateSourceList.ps1" misalnya, dan jalankan skrip sebagai
file out.txt akan berisi
sumber