Alat untuk melacak #sertakan dependensi [ditutup]

175

Ada saran bagus? Input akan menjadi nama file header dan output harus berupa daftar (lebih disukai pohon) dari semua file termasuk secara langsung atau tidak langsung.

Agnel Kurian
sumber
4
Ini bukan tentang "favorit" termasuk ditampilkan dengan baik di gcc, tetapi msv tidak. Jadi kami (saya) sedang mencari alat apa pun.
fantastory
70
Mengapa saya terus menemukan pertanyaan "di luar topik" yang sangat membantu?
jfritz42
5
@ jfritz42: Ini harus diberikan penghargaan "Komentar Tahun Ini"! Bagaimana satu moderator dapat melabeli pertanyaan "di luar topik" ketika ada begitu banyak topik dan begitu banyak pengguna?
Totoro
2
Saya ingin mencatat bahwa ada lebih banyak alat untuk menangani #includedependensi seperti cpp-dependencies , iwyu , dan dep-matrix yang merupakan alat yang cukup naif yang ditulis dengan python.
nonsensickle
3
@ jfritz42 Angka-angkanya jelas: 123 suara dan 62 favorit. Banyak orang melihatnya seperti ini. Standar SO yang aneh. Saya juga ragu bahwa pertanyaan seperti itu akan memiliki jawaban hebat yang sama pada SuperUser.
Andreas

Jawaban:

148

Jika Anda memiliki akses ke GCC / G ++, maka -Mopsi akan menampilkan daftar ketergantungan. Itu tidak melakukan hal-hal ekstra yang dilakukan oleh alat-alat lain, tetapi karena itu berasal dari kompiler, tidak ada kemungkinan bahwa itu akan mengambil file dari tempat yang "salah".

KeithB
sumber
60
-Hbahkan memberi pohon!
SamB
28
-MMmelompati header sistem
TheJosh
3
Juga dengan -oopsi kompiler akan menulis output ke file daripada stdout.
Hi-Angel
2
@ SamB Ini hanya berfungsi jika tidak ada kesalahan, dan mencetak ke stderrbukan stdout. Jika tidak, opsi ini lebih umum.
user877329
92

Terima kasih untuk KeithB. Saya mencari dokumen untuk cl.exe (VS2008) dan menemukan flag / showIncludes. Dari IDE, ini dapat diatur dari halaman properti file CPP apa pun.

Tangkapan layar

Agnel Kurian
sumber
1
Ini sangat berguna dalam menyelesaikan beberapa kesalahan / peringatan kompilasi yang sangat sulit. Terima kasih banyak!
Ashwin Nanjappa
Ini juga sangat berguna ketika mencoba untuk mengoptimalkan header yang telah dikompilasi!
fmuecke
Ketika bekerja di VS, saya pikir ini adalah solusi tercepat untuk menyelesaikan masalah saya ~ :-)
yaobin
Ini tampaknya tidak berfungsi, jika beberapa tajuk memasukkan tajuk std c misalnyamath.h
abergmeier
29

Untuk solusi berat, Anda harus memeriksa oksigen . Memindai melalui basis kode Anda dan muncul dengan situs web, yang secara efektif, mendokumentasikan kode Anda. Salah satu dari banyak hal yang ditunjukkannya adalah termasuk pohon.

Jika Anda ingin dapat menyambungkan output alat ini ke beberapa proses lain, maka ini mungkin tidak berfungsi untuk Anda (meskipun doxygen melakukan output ke format lain, saya tidak terlalu familiar dengan fitur itu). Jika Anda hanya ingin melihat dependensi, itu harus bekerja dengan baik.

Matt Dillard
sumber
20

Saya telah bermain-main dengan alat yang disebut cinclude2dot . Itu cukup berguna untuk mendapatkan pegangan pada basis kode yang agak besar ketika saya datang untuk bekerja di sini. Saya benar-benar berpikir untuk mengintegrasikannya ke dalam build harian kami pada akhirnya.

Brian Stewart
sumber
2
Alat ini bekerja dengan sangat baik. Saya mengalami masalah dengan g ++ dan -M dan oksigen.
sleeparrow
Saya menulis skrip python untuk membaca output dari cinclude2dot dan mendapatkan semua dependensi dalam peta dan kemudian melakukan kedalaman-pertama-traversal untuk akhirnya menghasilkan hutan sumber. Hutan yang tidak memiliki .cc/.c/.cxxfile apa pun .hdi dalamnya (hanya file di dalamnya) mungkin berlebihan.
shuva
12

Pertama, cinclude2dot.pl adalah skrip perl yang menganalisis kode C / C ++ dan menghasilkan grafik ketergantungan #include sebagai file titik untuk input ke graphviz.

http://www.flourish.org/cinclude2dot/

Jika Anda tidak ingin menggunakan alat manual semacam itu, maka pemenang sejauh ini menurut saya adalah alat yang dikenal sebagai "Sertakan Manajer" dari ProFactor.

http://www.profactor.co.uk/includemanager.php

Ada uji coba gratis, dan itu luar biasa. Ini adalah plug-in untuk Visual Studio yang benar-benar terintegrasi sehingga mengklik dua kali pada sesuatu di sini akan membawa Anda ke tempat di mana itu termasuk di sana.

Tooltip mouseover memberi Anda semua info yang Anda inginkan, dan itu memungkinkan Anda menelusuri / naik, menghapus seluruh sub pohon yang tidak Anda pedulikan, melihat representasi selain grafik, menelusuri daftar kecocokan untuk ini dan itu, sangat bagus.

Jika Anda cepat tentang itu, Anda dapat memperbaiki struktur #include proyek besar sebelum uji coba habis. Meski begitu, tidak memerlukan biaya banyak, sekitar $ 35 per lisensi.

Untuk apa yang dilakukannya, itu sempurna. Tidak hanya # sertakan grafik, tetapi juga lintas dependensi proyek dari file bersama, dampak pada waktu pembangunan, properti terperinci dalam kisi, sempurna.

Allbite
sumber
Saya telah berhasil menggunakan IncludeManager dalam proyek C saya. Saya menggunakan Visual Studio 2013.
smwikipedia
Agak mencurigakan.
sdd
12

Berita bagus: redhat Source-Navigator (berjalan di Windows juga). Tentu saja, sakelar kompiler (yang disebutkan sebelumnya) memiliki penguraian yang unggul dan saya tidak yakin bagaimana ini akan menangani MFC, Qt dan kata kunci ajaibnya.

redhat Sumber-Navigator

Agnel Kurian
sumber
5

Membangun berdasarkan jawaban KeithB , berikut adalah sintaksis GNUmake untuk secara otomatis 1) menghasilkan file-file dependensi, 2) menjaga mereka tetap mutakhir, dan 3) menggunakannya dalam makefile Anda:

.dep:
    mkdir $@
.dep/%.dep: %.c .dep
    (echo $@ \\; $(CC) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
.dep/%.dep: %.cpp .dep
    (echo $@ \\; $(CXX) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
DEPEND := $(patsubst %.dep,.dep/%.dep,$(OBJ:.o=.dep))
-include $(DEPEND)

(Pastikan untuk mengubah indentasi itu menjadi hardtab.)

cxw
sumber
3

Memahami C ++ harus dapat membantu Anda: membangun basis data yang dapat Anda akses dari Perl.

Xavier Nodet
sumber
Memahami bersifat komersial, tetapi IMO luar biasa. Anda dapat mencobanya secara gratis.
skelliam
1

cscope ( http://cscope.sourceforge.net/ ) melakukan ini dalam xterm mandiri, dan juga dapat digunakan di dalam editor favorit Anda - ia memiliki emacs hebat dan dukungan vi / vim.

svec
sumber