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.


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".


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


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.


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.


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.


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


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.)



3

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


Memahami bersifat komersial, tetapi IMO luar biasa. Anda dapat mencobanya secara gratis.
skelliam


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.