#İnclude bağımlılıklarını izleme aracı [kapalı]


175

İyi bir öneriniz var mı? Girdi bir başlık dosyasının adı olacak ve çıktı da doğrudan veya dolaylı olarak dahil tüm dosyaların bir listesi (tercihen bir ağaç) olmalıdır.


4
Bir "favori" içerir gcc güzel gösterilir, ancak msvs değil. Bu yüzden biz (I) herhangi bir araç arıyoruz.
fantastory

70
"Konu dışı" soruları neden bu kadar faydalı buluyorum?
jfritz42

5
@ jfritz42: Buna "Yılın Yorumu" ödülü verilmeli! Bir moderatör bu kadar çok konu ve çok kullanıcı olduğunda bir soruyu "konu dışı" olarak etiketleyebilir mi?
Totoro

2
Python ile yazılmış oldukça naif bir araç olan cpp bağımlılıkları , iwyu ve dep-matris#include gibi bağımlılıklarla başa çıkmak için çok daha fazla araç olduğunu belirtmek istedim .
nonsensickle

3
@ jfritz42 Rakamlar açık: 123 oy ve 62 favori. Birçok insan bunu böyle görüyor. Tuhaf SO standartları. Ayrıca bu tür soruların SuperUser'da aynı harika cevaplara sahip olacağından şüpheliyim.
Andreas

Yanıtlar:


148

GCC / G ++ 'a erişiminiz varsa, -Mseçenek bağımlılık listesinin çıktısını verecektir. Diğer araçların yaptığı ekstra şeyleri yapmaz, ancak derleyiciden geldiği için, dosyaları "yanlış" yerden alma şansı yoktur.


60
-Hhatta bir ağaç verir!
SamB

28
-MMsistem başlıklarını atlıyor
TheJosh

3
Ayrıca -oseçenek derleyici çıktı stdout yerine dosyaya yazacaktır.
Hi-Angel

2
@SBB Bu yalnızca hata yoksa çalışır ve stderrbunun yerine yazdırır stdout. Aksi takdirde, bu seçenek daha geneldir.
user877329

92

KeithB'ye teşekkürler. Ben cl.exe (VS2008) için belgeleri baktı ve / showIncludes bayrağı bulundu. IDE'den bu, herhangi bir CPP dosyasının özellik sayfasından ayarlanabilir.

Ekran görüntüsü


1
Bu, çok zor derleme hatalarının / uyarılarının çözümünde son derece yararlıdır. Çok teşekkürler!
Ashwin Nanjappa

Bu ayrıca önceden derlenmiş başlıkları optimize etmeye çalışırken son derece kullanışlıdır!
fmuecke

VS çalışırken, bu benim sorunumu çözmek için en hızlı çözüm olduğunu düşünüyorum ~ :-)
yaobin

Bazı başlıklar bir std c başlığı içeriyorsa, bu işe yaramaz gibi görünüyormath.h
abergmeier

29

Ağır bir çözelti için, oksijeni kontrol etmelisiniz . Kod tabanınızı tarar ve kodunuzu belgeleyen bir web sitesi etkin bir şekilde gelir. Gösterdiği birçok şeyden biri ağaçları içerir.

Bu aracın çıktısını başka bir işleme takmak istiyorsanız, bu sizin için çalışmayabilir (doxygen başka formatlara çıktı yapsa da, bu özelliğe gerçekten aşina değilim). Sadece bağımlılıkları göz küresi yapmak istiyorsanız, harika çalışmalıdır.


20

Cinclude2dot adlı bir araçla oynadım . Ben burada çalışmaya geldiğimde oldukça büyük bir kod temeli ele almak oldukça yararlı oldu. Aslında sonunda günlük yapımıza entegre etmeyi düşündüm.


2
Bu araç son derece iyi çalışıyor. G ++ 's -M ve doxygen ile sorun yaşadım.
sleeparrow

Cinclude2dot çıktısını okumak ve bir haritadaki tüm bağımlılığı almak için bir python betiği yazdım ve daha sonra bir kaynak ormanı çıkarmak için derinlik-ilk geçişi yaptım. İçinde hiçbir .cc/.c/.cxxdosya bulunmayan orman (yalnızca içindeki .hdosyalar) gereksiz olabilir.
shuva

12

İlk olarak, cinclude2dot.pl, C / C ++ kodunu analiz eden ve graphviz'e giriş için bir nokta dosyası olarak #include bağımlılık grafiği üreten bir perl betiğidir.

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

Bu tür bir manuel aracın yoluna gitmek istemiyorsanız, o zaman uzak kazananların elimi, bence ProFactor'dan "IncludeManager" olarak bilinen bir araçtır.

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

Ücretsiz bir deneme var ve harika. Visual Studio için tamamen entegre olan bir eklentidir, bu yüzden burada bir şeye çift tıklamak sizi orada bulunduğu yere götürür.

Araç ipucu mouseovers size istediğiniz tüm bilgileri verir ve aşağı / yukarı, umursamadığınız tüm alt ağaçları kaldırmanıza, grafikler dışındaki sunumları görüntülemenize, bunun için bir eşleşme listesi arasında dolaşmanıza izin verir ve bu harika.

Bu konuda hızlıysanız, deneme süresi dolmadan önce büyük projelerin #include yapısını yeniden düzenleyebilirsiniz. Yine de, lisans başına çok fazla, yaklaşık 35 $ maliyeti yoktur.

Yaptığı şey için, sadece mükemmel. Sadece # grafikleri değil, aynı zamanda paylaşılan dosyaların proje bağımlılıklarını çaprazlayın, derleme sürelerine etkisi, ızgaralardaki ayrıntılı özellikleri mükemmel.


C projemde IncludeManager'ı başarıyla kullandım. Visual Studio 2013 kullanıyorum.
smwikipedia 13:17

Biraz şüpheli.
sdd

12

İyi haber: Redhat Source-Navigator (Windows üzerinde de çalışır). Tabii ki, derleyici anahtarları (daha önce bahsedilen) üstün ayrıştırma var ve bunun MFC, Qt ve sihirli anahtar kelimeleri nasıl işleyeceğinden emin değilim.

Kaynak Gezgini redhat


5

Bina KeithB cevabı , burada makefile bunları kullanmak) otomatik olarak 1'e GNUmake sözdizimi) 3), bağımlılık dosyaları 2 üretmek bugüne kadar onları tutmak ve geçerli:

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

(Bu girintileri hardtabs olarak değiştirdiğinizden emin olun.)





Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.