Saya sedang dalam proses menulis ulang pengaturan CMake lama untuk menggunakan fitur-fitur modern seperti propagasi ketergantungan otomatis. (Yaitu menggunakan hal-hal seperti target_include_directories(<target> PUBLIC <dir>)bukaninclude_directories(<dir>) .) Saat ini, kami secara manual menangani semua informasi ketergantungan proyek dengan mengatur sekelompok properti direktori global.
Dalam pengujian saya, saya telah menemukan beberapa contoh di mana target dalam membangun baru akan menautkan ke perpustakaan yang tidak dibangun oleh yang lama. Saya tidak menghubungkannya secara eksplisit, jadi saya tahu ini berasal dari dependensi target, tetapi untuk menemukan yang mana saya harus secara rekursif melihat semua proyek.CMakeLists.txt , menindaklanjuti hierarki dependensi sampai saya menemukan salah satu yang menarik di perpustakaan yang dimaksud. Kami memiliki lusinan perpustakaan sehingga ini bukan proses yang sepele.
Apakah CMake menyediakan cara untuk melihat, untuk setiap target, mana dari dependensinya yang ditambahkan secara eksplisit, dan mana yang diperbanyak melalui dependensi transitif?
Sepertinya --graphvizoutput memang menunjukkan perbedaan ini, jadi jelas CMake tahu konteksnya secara internal. Namun, saya ingin menulis treeskrip mirip untuk menampilkan informasi ketergantungan pada baris perintah, dan mem-parsing file Graphviz terdengar seperti mimpi buruk dan peretasan.
Sejauh yang saya tahu, cmake-file-apitidak tidak termasuk informasi ini. Saya pikir codemodel/target/dependenciesbidang ini mungkin berfungsi, tetapi daftar dependensi lokal dan transitif dicampur bersama. Dan backtracebidang masing-masing ketergantungan hanya mengikat kembali ke add_executable/ add_librarypanggilan untuk target saat ini.
--graphizopsi tidak menjawab pertanyaan Anda? Mengapa parsing file dot terasa seperti mimpi buruk? File dot adalah cara paling sederhana, umum dan fleksibel untuk mewakili titik terhubung yang dapat dibaca manusia. Dengangvprutilitas Anda dapat melakukan apa saja dengan mereka dalam gaya awk-ish, dan Anda dapat mengimpornya dalam bahasa lain. Mengapa file titik, yang secara harfiah mewakili struktur dependensi mirip pohon di antara target, bukan "cara untuk melihat" yang Anda minta?