Sto riscrivendo un'installazione CMake legacy per utilizzare funzionalità moderne come la propagazione automatica delle dipendenze. (cioè usando cose come target_include_directories(<target> PUBLIC <dir>)
invece di include_directories(<dir>)
.) Attualmente gestiamo manualmente tutte le informazioni sulla dipendenza del progetto impostando un gruppo di proprietà della directory globale.
Nei miei test, ho trovato alcuni esempi in cui un target nella nuova build si collegherà a una libreria che la vecchia build non avrebbe. Non sto collegando esplicitamente ad esso, quindi so che questo proviene dalle dipendenze del target, ma per trovare quale (i) devo guardare ricorsivamente attraverso tutti i progetti CMakeLists.txt
, seguendo la gerarchia delle dipendenze fino a quando non trovo uno che tira dentro la libreria in questione. Abbiamo dozzine di librerie, quindi questo non è un processo banale.
CMake fornisce un modo per vedere, per ciascun target, quali delle sue dipendenze sono state aggiunte esplicitamente e quali sono state propagate attraverso dipendenze transitive?
Sembra che l' --graphviz
uscita non mostrare questa distinzione, così chiaramente CMake conosce il contesto internamente. Tuttavia, vorrei scrivere uno tree
script simile per mostrare le informazioni sulla dipendenza dalla riga di comando e l'analisi dei file Graphviz sembra sia un incubo che un hack.
Per quanto posso dire, cmake-file-api
non senza includere queste informazioni. Pensavo che il codemodel/target/dependencies
campo potesse funzionare, ma elenca dipendenze sia locali che transitive mescolate insieme. E il backtrace
campo di ciascuna dipendenza si ricollega solo alla add_executable
/ add_library
call per l'obiettivo corrente.
--graphiz
opzione non risponde alla tua domanda? Perché analizzare i file di punti sembra un incubo? I file Dot sono il modo più semplice, comune e flessibile per rappresentare i punti collegati leggibili dall'uomo. Con l'gvpr
utilità puoi fare qualsiasi cosa con loro in stile awk-ish e puoi importarli in altre lingue. Perché un file dot, che rappresenta letteralmente una struttura ad albero di dipendenze tra target, non un "modo di vedere" che quello che chiedi?