Otomatik bağımlılık yayma gibi modern özellikleri kullanmak için eski bir CMake kurulumunu yeniden yazma sürecindeyim. (örneğin, target_include_directories(<target> PUBLIC <dir>)bunun yerine gibi şeyler kullanarak include_directories(<dir>)) Şu anda, bir grup genel dizin özelliği ayarlayarak tüm proje bağımlılığı bilgilerini el ile işliyoruz.
Testlerimde, yeni yapıdaki bir hedefin, eski yapıdaki bir kütüphaneye bağlanacağı birkaç örnek buldum. Ben projenin en tüm özyinelemeli görünüme sahip olan bir (ler) bulmak amacıyla bu hedefin bağımlılıkları geliyor bilmeleri, açıkça kendisine bağlayan söylemiyorum ama CMakeLists.txtben bulana kadar bağımlılık hiyerarşisini takip etmek, s söz konusu kütüphaneyi çeken bir kitap. Düzinelerce kütüphanemiz var, bu yüzden bu önemsiz bir süreç değil.
CMake, her bir hedef için hangi bağımlılıklarının açıkça eklendiğini ve hangilerinin geçişli bağımlılıklar yoluyla yayıldığını görmenin herhangi bir yolunu sunuyor mu?
Görünüşe --graphvizçıkış yapar bu farkı göstermek, böylece açıkça CKağıt içten bağlamı bilir. Ancak, treekomut satırında bağımlılık bilgilerini göstermek için benzer bir komut dosyası yazmak istiyorum ve Graphviz dosyalarını ayrıştırmak hem kabus hem de kesmek gibi geliyor.
Bildiğim kadarıyla söyleyebilirim, cmake-file-apiyok değil bu bilgiyi içermektedir. codemodel/target/dependenciesAlanın işe yarayabileceğini düşündüm , ancak hem karma hem de geçişli bağımlılıkları listeliyor. Ve backtraceher bağımlılığın alanı yalnızca geçerli hedef için add_executable/ add_libraryçağrısına geri bağlanır .
--graphizSeçenek sorunuza nasıl cevap vermiyor? Nokta dosyalarını ayrıştırmak neden kabus gibi geliyor? Nokta dosyaları, insan tarafından okunabilir bağlı noktaları temsil etmenin en basit, ortak ve esnek yoludur. İlegvprfayda Eğer awk-imsi tarzda onlarla her şeyi yapabilir ve diğer dillerde aktarabilirsiniz. Neden tam anlamıyla hedefler arasında ağaç benzeri bir bağımlılık yapısını temsil eden bir nokta dosyası, ne istediğini "görmenin" bir yolu değil?