나는 이미 Doxygen + Graphviz를 적용한 중간 크기의 C/C++ 프로젝트에서 작업합니다. 헤더 그래프는 유용하지만 #include
에 기반한 관계 만 보여줍니다. 나는 #include
뿐만 아니라 실제 심볼 사용법을 기반으로 파일 종속성을 분석하는 (선호하는 리눅스 기반의) 툴을 찾는 것에 관심이있다. 예를 들어, 이러한 도구는 을 포함하는 a.cpp
을 나타내지 만 a.cpp
은 b.h
에 포함 된 c.h
에 선언 된 SomeClass
을 사용합니다. 그것은 또한 정리 될 수있는 헤더 포함을 제안 할 수 있습니다."딥"헤더 종속성 분석
21
A
답변
18
나는 꽤 좋은 결과를 가지고 Include What You Use을 사용했습니다. Clang을 사용하여 C++ 코드를 구문 분석하고 제거 할 헤더 파일을 추가하고 전달할 것을 제안합니다.
하나의 단점은 코드 레이아웃 (기본적으로 Google 코딩 표준)을 가정한다는 것입니다. 따라서 SomeClass.cpp
이라는 파일이있는 경우에만 SomeFile.h
이 표시됩니다. 또한 프로젝트의 루트에서 전체 경로를 사용하는 것이 좋습니다 (#include "SomeClass.h"
대신 #include "src/SomeClass.h"
). 결국 모호성을 피하면서 어쨌든이 규약으로 코드를 변경했으나 시도 할 때 머리가 필요합니다.
보통 CC=include-what-you-use
을 설정하고 결과를 얻으려면 다시 빌드하십시오. - 모든 clang 기계를 사용하여 -I
인수를 구문 분석합니다. 결과를 사용하여 #include 행을 자동으로 업데이트하는 python 프로그램이 있습니다.
편집 : 정교가 아니라 설정하는 간단하고 제거하는 #include
의를 제안 할 수 있습니다
또 다른 도구는 deheader입니다. 이것은 C++ 파일을 임시 위치에 복사하고 #include
을 제거하고 다시 컴파일하여 작동합니다. 다시 컴파일하면 헤더 파일을 안전하게 제거 할 수 있습니다. 그것은 앞으로 선언문이나 멋진 것을 제안하는 것이지, 구현 파일에 불필요한 줄을 포함시킬 수 있습니다.
관련 문제
- 1. DLL 매니페스트에서 CRT 종속성 분석
- 2. XIncludes를 사용하여 일련의 XML 파일에 대한 종속성 트리 분석
- 3. 음파 탐지기 (또는 기타)를 사용하여 테스트의 종속성 분석 수행
- 4. 종속성 프로젝트 지정 : 복사 - 종속성?
- 5. NLTK에는 종속성 분석을위한 도구가 있습니까?
- 6. 종속성 주입을 사용하여 종속성 인젝터 주입
- 7. 종속성 속성 내가 지정 종속성 속성을 대상
- 8. MVVM의 종속성
- 9. 순환 종속성
- 10. 이적 종속성
- 11. 종속성 AI에
- 12. 조건부 종속성
- 13. 종속성 주입주기
- 14. 연결 종속성
- 15. 순환 종속성
- 16. 프로젝트 종속성
- 17. PowerBuilder 용 코드 분석 도구
- 18. Java 프로젝트에서 JAR 의존성 분석
- 19. m2eclipse - pom과 종속성 정의 후 - classpath/Maven에 라이브러리 없음 종속성
- 20. 선택적 종속성 처리 (C#)
- 21. 종속성 속성 올바른 사용
- 22. .NET Framework 종속성
- 23. DRY에 대한 순환 종속성
- 24. linq2sql은 종속성 삽입을 사용합니까?
- 25. 최소 빌드 종속성 트리
- 26. 종속성 속성 사용 비용
- 27. MVVM의 종속성 체이닝
- 28. Maven 소스 코드 종속성
- 29. 종속성 트리 문서화
- 30. .exe 종속성 확인
유망한 것으로 보이지만 설치할 바이너리가 없다는 것은 정말 고통 스럽습니다. 그리고 llvm을 컴파일하기 시작했을 때, 하드 드라이브가 용량을 가득 채웠습니다. – Reinderien
@Reinderien llvm + clang의 체크 아웃 및 빌드는 1Gb 주변의 "유일한"것이므로 configure 스크립트에 --enable-optimized를 전달해야합니다. 디버그 빌드를 사용하면 4Gb를 다시 설정할 수 있습니다. – richq
저는 마침내 IWYU를 구축 할 수있었습니다. 예, 부피가 크고, 부 풀리는 등의 문제가있었습니다 만, 아무것도없는 것보다 낫습니다. 나는 deheader도 살펴볼 것이다. 감사 – Reinderien