Kaynak dosyaları CMake'de belirtmenin en iyi yolu, bunları açıkça listelemektir .
CMake yaratıcıları kendileri tavsiyede değil globbing kullanımına.
Bkz. Https://cmake.org/cmake/help/v3.15/command/file.html?highlight=glob#file
(Kaynak ağacınızdan kaynak dosyalarının bir listesini toplamak için GLOB kullanılmasını önermiyoruz. Bir kaynak eklendiğinde veya kaldırıldığında CMakeLists.txt dosyası değişmezse, oluşturulan derleme sistemi CMake'den ne zaman yeniden oluşturulmasını isteyeceğini bilemez.)
Tabii ki, dezavantajların ne olduğunu bilmek isteyebilirsiniz - okumaya devam edin!
Globbing Başarısız Olduğunda:
Globbingin en büyük dezavantajı, dosya oluşturmanın / silmenin derleme sistemini otomatik olarak güncellememesidir.
Dosyaları ekleyen kişi sizseniz, bu kabul edilebilir bir değiş tokuş gibi görünebilir, ancak bu kodunuzu oluşturan diğer kişiler için sorunlara neden olur, projeyi sürüm kontrolünden günceller, derlemeyi çalıştırır, sonra sizinle iletişime
geçerek "derlemenin kırık".
Daha da kötüsü, başarısızlık genellikle sorunun nedenine dair herhangi bir ipucu vermeyen bazı bağlantı hataları verir ve sorun giderme sırasında zaman kaybedilir.
Üzerinde çalıştığım bir projede globbing yapmaya başladık, ancak yeni dosyalar eklendiğinde çok fazla şikayet aldık, dosyaları globbing yerine açıkça listelemek için yeterli sebepti.
Bu aynı zamanda yaygın git iş akışlarını
( git bisect
ve unsur dalları arasında geçiş yapmayı) keser .
Bu yüzden bunu tavsiye edemedim, neden olduğu problemler kolaylıktan çok daha ağır basar, birisi bu nedenle yazılımınızı oluşturamazsa, sorunu izlemek veya sadece vazgeçmek için çok zaman kaybedebilirler.
Ve başka bir not, Sadece dokunmayı hatırlamak CMakeLists.txt
her zaman yeterli değildir, globbing kullanan otomatik derlemelerle, dosyalar son binadan beri eklenmiş / kaldırılmış olabileceğinden her derlemeden cmake
önce çalıştırmak zorunda kaldım *.
Kural istisnaları:
Globbingin tercih edildiği zamanlar vardır:
CMakeLists.txt
CMake kullanmayan mevcut projeler için bir dosya ayarlamak için .
Başvurulan tüm kaynağı almanın hızlı bir yolu (derleme sistemi çalıştığında - globbing'i açık dosya listeleriyle değiştirin).
- CMake birincil derleme sistemi olarak kullanılmadığında , örneğin CMake kullanmayan bir proje kullanıyorsanız ve bunun için kendi derleme sisteminizi korumak istiyorsanız.
- Dosya listesinin o kadar sık değiştiği her durumda, bakımı pratik olmaz. Bu durumda yararlı olabilir , ancak daha sonra güvenilir / doğru bir yapı oluşturmak için her zaman
cmake
yapı dosyaları oluşturmak için çalışmayı kabul etmelisiniz (CMake'in amacına aykırı - yapılandırmayı binadan ayırma yeteneği) .
* Evet, bir güncellemeden önce ve sonra diskteki dosya ağacını karşılaştırmak için bir kod yazabilirdim, ancak bu böyle güzel bir geçici çözüm değil ve yapı sistemine bırakılan daha iyi bir şey değil.