เครื่องมือในการติดตาม #include การอ้างอิง [ปิด]


175

ข้อเสนอแนะที่ดี? อินพุตจะเป็นชื่อของไฟล์ส่วนหัวและเอาต์พุตควรเป็นรายการ (ควรเป็นแผนผัง) ของไฟล์ทั้งหมดรวมถึงโดยตรงหรือโดยอ้อม


4
มันไม่เกี่ยวกับการรวม "รายการโปรด" จะแสดงเป็น gcc อย่างดี แต่ msvs ไม่ได้ ดังนั้นเรา (I) กำลังมองหาเครื่องมือใด ๆ
มหัศจรรย์

70
เหตุใดฉันจึงค้นหาคำถาม "ปิดหัวข้อ" เป็นประโยชน์อย่างยิ่ง
jfritz42

5
@ jfritz42: ควรได้รับรางวัล "ความคิดเห็นแห่งปี"! ผู้กลั่นกรองหนึ่งจะติดป้ายคำถามว่า "ปิดหัวข้อ" เมื่อมีหัวข้อมากมายและผู้ใช้จำนวนมากได้อย่างไร
Totoro

2
ฉันต้องการที่จะทราบว่ามีเครื่องมือมากมายสำหรับการจัดการกับการ#includeพึ่งพาเช่นcpp-dependencies , iwyuและdep-matrixซึ่งเป็นเครื่องมือที่ไร้เดียงสาที่เขียนด้วยไพ ธ อน
nonsensickle

3
@ jfritz42 ตัวเลขมีความชัดเจน: 123 คะแนนโหวตและ 62 รายการโปรด หลายคนเห็นว่าเป็นแบบนี้ มาตรฐานแปลก ๆ ฉันยังสงสัยว่าคำถามดังกล่าวจะมีคำตอบที่ยอดเยี่ยมเหมือนกันใน SuperUser
Andreas

คำตอบ:


148

หากคุณมีสิทธิ์เข้าถึง GCC / G ++ -Mตัวเลือกจะแสดงรายการการพึ่งพา มันไม่ได้ทำสิ่งพิเศษใด ๆ ที่เครื่องมืออื่นทำ แต่เนื่องจากมาจากคอมไพเลอร์จึงไม่มีโอกาสที่จะรับไฟล์จากตำแหน่ง "ผิด"


60
-Hแม้แต่ให้ต้นไม้!
SamB

28
-MMข้ามส่วนหัวของระบบ
TheJosh

3
นอกจากนี้ยังมี-oตัวเลือกที่คอมไพเลอร์จะเขียนผลลัพธ์ไปยังไฟล์แทน stdout
Hi-Angel

2
@SamB นี้จะทำงานหากไม่มีข้อผิดพลาดและการพิมพ์แทนstderr stdoutมิฉะนั้นตัวเลือกนี้จะกว้างขึ้น
user877329

92

ขอบคุณ KeithB ฉันค้นหาเอกสารสำหรับ cl.exe (VS2008) และพบแฟล็ก / showIncludes จาก IDE สามารถตั้งค่าได้จากหน้าคุณสมบัติของไฟล์ CPP ใด ๆ

สกรีนช็อต


1
สิ่งนี้มีประโยชน์อย่างมากในการแก้ไขข้อผิดพลาด / คำเตือนที่รวบรวมได้ยากมาก ขอบคุณมาก!
Ashwin Nanjappa

นอกจากนี้ยังมีประโยชน์อย่างมากเมื่อพยายามเพิ่มประสิทธิภาพส่วนหัว precompiled!
fmuecke

เมื่อทำงานใน VS ผมคิดว่านี่เป็นทางออกที่เร็วที่สุดในการแก้ปัญหาของฉัน ~ :-)
yaobin

สิ่งนี้ดูเหมือนจะไม่ทำงานหากส่วนหัวบางส่วนมีส่วนหัว std c เช่นmath.h
abergmeier

29

สำหรับการแก้ปัญหาหนักคุณควรตรวจสอบDoxygen มันจะสแกนฐานรหัสของคุณและสร้างเว็บไซต์ที่มีประสิทธิภาพซึ่งเป็นเอกสารรหัสของคุณ สิ่งหนึ่งที่แสดงให้เห็นคือต้นไม้

หากคุณกำลังมองหาที่จะสามารถเสียบเอาท์พุทของเครื่องมือนี้เข้ากับกระบวนการอื่น ๆ ได้สิ่งนี้อาจไม่ได้ผลสำหรับคุณ (แม้ว่า doxygen จะส่งออกไปยังรูปแบบอื่น ๆ ฉันไม่คุ้นเคยกับคุณสมบัตินี้จริง ๆ ) หากคุณเพียงต้องการที่จะใช้อ้างอิงกับลูกตามันก็น่าจะใช้งานได้ดี


20

ผมเคยเล่นรอบกับเครื่องมือที่เรียกว่าcinclude2dot มันค่อนข้างมีประโยชน์ในการจัดการกับ codebase ที่ค่อนข้างใหญ่เมื่อฉันมาทำงานที่นี่ ฉันคิดเกี่ยวกับการรวมเข้ากับงานสร้างประจำวันของเราในที่สุด


2
เครื่องมือนี้ทำงานได้ดีเป็นพิเศษ ฉันมีปัญหากับ g ++ '-M และ doxygen
Sleeparrow

ฉันเขียนสคริปต์ไพ ธ อนเพื่ออ่านผลลัพธ์ของ cinclude2dot และรับการพึ่งพาทั้งหมดในแผนที่จากนั้นทำการสำรวจเส้นทางแรกเพื่อสำรวจแหล่งป่าไม้ในที่สุด ฟอเรสต์ที่ไม่มี.cc/.c/.cxxไฟล์ใด ๆในนั้น (เฉพาะ.hไฟล์ในนั้น) อาจซ้ำซ้อน
shuva

12

อันดับแรก cinclude2dot.pl เป็นสคริปต์ perl ซึ่งทำการวิเคราะห์รหัส C / C ++ และสร้างกราฟการพึ่งพา #include เป็นไฟล์ dot สำหรับป้อนข้อมูลลงใน graphviz

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

หากคุณไม่ต้องการใช้เครื่องมือแมนนวลแบบนั้นผู้ชนะที่ไกล ๆ ก็คือเครื่องมือที่เรียกว่า "IncludeManager" จาก ProFactor

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

มีการทดลองใช้ฟรีและมันยอดเยี่ยม มันเป็นปลั๊กอินสำหรับ Visual Studio ที่รวมเข้าด้วยกันอย่างสมบูรณ์ดังนั้นการคลิกสองครั้งที่สิ่งที่นี่จะนำคุณไปยังสถานที่ที่รวมอยู่ที่นั่น

Tooltip mouseovers ให้ข้อมูลทั้งหมดที่คุณต้องการและมันช่วยให้คุณสามารถเจาะลึกลง / ขึ้นลบทรีย่อยทั้งหมดที่คุณไม่สนใจดูการแสดงอื่น ๆ นอกเหนือจากกราฟวนรอบรายการการแข่งขันสำหรับเรื่องนี้และมันยอดเยี่ยมมาก

หากคุณรวดเร็วเกี่ยวกับเรื่องนี้คุณสามารถปรับโครงสร้าง #include ของโครงการขนาดใหญ่ก่อนที่การทดลองจะหมด ถึงกระนั้นมันก็ไม่ได้มีค่าใช้จ่ายมากนักประมาณ $ 35 ต่อใบอนุญาต

สำหรับสิ่งที่มันทำมันเป็นเพียงที่สมบูรณ์แบบเกี่ยวกับ ไม่เพียง แต่ # กราฟรวมถึง แต่ยังข้ามการพึ่งพาโครงการของไฟล์ที่ใช้ร่วมกันส่งผลกระทบต่อเวลาสร้างคุณสมบัติรายละเอียดในกริดที่สมบูรณ์แบบ


ฉันได้ใช้ IncludeManager ในโครงการ C ของฉันเรียบร้อยแล้ว ฉันใช้ Visual Studio 2013
smwikipedia

ค่อนข้างน่าสงสัย
sdd

12

ข่าวดี: redhat Source-Navigator (ทำงานบน Windows ด้วย) แน่นอนว่าคอมไพเลอร์สวิทช์ (ที่กล่าวถึงก่อนหน้านี้) มีการแยกวิเคราะห์ที่เหนือกว่าและฉันไม่แน่ใจว่าสิ่งนี้จะจัดการกับ MFC, Qt และคำหลักมหัศจรรย์ของพวกเขาได้อย่างไร

redhat Source-Navigator


5

จากคำตอบของ KeithBนี่คือไวยากรณ์ของ GNU สร้างโดยอัตโนมัติ 1) สร้างไฟล์อ้างอิง 2) ทำให้ทันสมัยและ 3) ใช้ใน makefile ของคุณ:

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

(ตรวจสอบให้แน่ใจว่าได้เปลี่ยนการเยื้องเป็นฮาร์ดแท็บ)



3

เข้าใจสำหรับ C ++ควรจะสามารถช่วยคุณ: มันสร้างฐานข้อมูลที่คุณสามารถเข้าถึงได้จาก Perl


ความเข้าใจเป็นเชิงพาณิชย์ แต่เป็น IMO ที่เหลือเชื่อ คุณสามารถทดลองใช้ได้ฟรี
skelliam

1

cscope ( http://cscope.sourceforge.net/ ) ทำสิ่งนี้ใน xterm แบบสแตนด์อโลนและยังสามารถใช้ในโปรแกรมแก้ไขที่คุณชื่นชอบ - มันมี emacs และการสนับสนุน vi / vim ที่ยอดเยี่ยม


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.