좋은 제안이 있습니까? 입력은 헤더 파일의 이름이며 출력은 직접 또는 간접적으로 포함 된 모든 파일의 목록 (바람직하게는 트리)이어야합니다.
#include
같은 종속성 을 처리하기위한 훨씬 더 많은 도구가 있다는 것을 알고 싶었습니다 .
좋은 제안이 있습니까? 입력은 헤더 파일의 이름이며 출력은 직접 또는 간접적으로 포함 된 모든 파일의 목록 (바람직하게는 트리)이어야합니다.
#include
같은 종속성 을 처리하기위한 훨씬 더 많은 도구가 있다는 것을 알고 싶었습니다 .
답변:
GCC / G ++에 액세스 할 수 있으면 -M
옵션 이 종속성 목록을 출력합니다. 다른 도구가하는 추가 작업은 수행하지 않지만 컴파일러에서 제공되므로 "잘못된"위치에서 파일을 가져올 가능성은 없습니다.
-H
심지어 나무를 준다!
-MM
시스템 헤더 생략
-o
옵션을 사용하면 컴파일러는 stdout 대신 파일에 출력을 씁니다.
stderr
대신에 인쇄됩니다 stdout
. 그렇지 않으면이 옵션이 더 일반적입니다.
KeithB에게 감사합니다. cl.exe (VS2008)에 대한 문서를 찾아서 / showIncludes 플래그를 찾았습니다. IDE에서는 CPP 파일의 속성 페이지에서 설정할 수 있습니다.
math.h
cinclude2dot 이라는 도구를 가지고 놀았습니다 . 여기서 일할 때 다소 큰 코드베이스를 처리하는 데 매우 유용했습니다. 나는 실제로 그것을 일일 빌드에 통합하는 것에 대해 생각했습니다.
.cc/.c/.cxx
파일 이없는 포리스트 ( .h
파일 만 포함 )는 중복 될 수 있습니다.
먼저 cinclude2dot.pl은 C / C ++ 코드를 분석하고 graphviz에 입력하기위한 도트 파일로 #include 종속성 그래프를 생성하는 perl 스크립트입니다.
http://www.flourish.org/cinclude2dot/
그런 종류의 수동 도구를 사용하고 싶지 않다면 수상자가 ProFactor의 "IncludeManager"라는 도구입니다.
http://www.profactor.co.uk/includemanager.php
무료 평가판이 있으며 훌륭합니다. 완전히 통합 된 Visual Studio 용 플러그인이므로 여기를 두 번 클릭하면 포함 된 곳으로 이동합니다.
툴팁 마우스 오버는 원하는 모든 정보를 제공하며 드릴 다운 / 업, 관심없는 전체 하위 트리 제거, 그래프 이외의 표현보기, 이에 대한 일치 목록 순환 등을 수행 할 수 있습니다.
만약 당신이 그것에 대해 빨리한다면, 당신은 시험이 다 떨어지기 전에 큰 프로젝트의 #include 구조를 리팩토링 할 수 있습니다. 그럼에도 불구하고 라이센스 당 약 $ 35의 비용이 들지 않습니다.
그것이하는 일에 대해서는 거의 완벽합니다. #include 그래프뿐만 아니라 공유 파일의 프로젝트 의존성, 빌드 시간에 미치는 영향, 그리드의 세부 속성, 완벽한.
좋은 소식 : redhat Source-Navigator (Windows에서도 실행). 물론 컴파일러 스위치 (앞서 언급)는 우수한 구문 분석을 가지고 있으며 이것이 MFC, Qt 및 해당 마술 키워드를 어떻게 처리하는지 잘 모르겠습니다.
KeithB의 답변 을 바탕으로 다음은 자동으로 1) 종속성 파일을 생성하고 2) 최신 파일을 유지하며 3) makefile에서 사용하는 GNUmake 구문입니다.
.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)
들여 쓰기를 하드 탭으로 변경하십시오.
makedepend를 확인할 수도 있습니다 .
cscope ( http://cscope.sourceforge.net/ )는 독립형 xterm에서이 작업을 수행하며 즐겨 사용하는 편집기 내에서 사용할 수 있습니다. 뛰어난 emacs 및 vi / vim 지원 기능이 있습니다.