Visual Studio에서 C ++ 파일의 #include 계층 표시


169

문제점 : Visual Studio 2010으로 마이그레이션하려고하는 대규모 Visual C ++ 프로젝트가 있습니다. 다양한 소스와 다양한 연령대의 다양한 요소가 혼합되어 있습니다. 와를 모두 포함 winsock.h하고 있기 때문에 문제가 발생 winsock2.h합니다.

질문 :#include Visual Studio C ++ 소스 파일 의 계층 구조를 표시하기위한 도구와 기술은 무엇입니까 ?

cl /P처리기 출력을 얻는 것에 대해 알고 있지만 어떤 파일에 다른 파일이 포함되어 있는지 명확하게 표시하지는 않습니다 (이 경우 /P출력은 376,932 줄 길이 8-)

완벽한 세계에서 나는 어떤 파일이 다른 파일과 라인 번호와 함께 포함되어있어 소스로 이동할 수있는 계층 적 표시를 원합니다.

source.cpp(1)
  windows.h(100)
    winsock.h
  some_other_thing.h(1234)
    winsock2.h

2
GCC / Clang 솔루션을 찾는 사람들의 gcc -H -fsyntax-only ...경우 계층 구조를 출력하는 데 사용 하십시오. stackoverflow.com/a/18593344/427545에 대한
Lekensteyn

답변:


234

설정이 있습니다 :

프로젝트 설정-> 구성 속성-> C / C ++-> 고급-> 포함 포함

트리를 생성합니다. 컴파일러 스위치 / showIncludes에 매핑됩니다.


20
참고 : 계층 구조는 출력 창에서 볼 수 있습니다.
CannibalSmith

3
관심있는 사람이 있다면 : Clang 플랫폼 툴셋 을 선택하더라도 추가하면 "포함 표시"가 가능합니다 -H.C/C++ -> Command Line - Additional Options
wip

3
여전히 컴파일 타임 오류와 관련된 직접 포함 계층 구조를 표시하고 행 번호를 표시하는 gcc의 "포함 소스"기능만큼 좋지는 않습니다.
Paul

2
Visual Studio에 포함 된 빠른 정규식을 만들었습니다 (프로그램 파일 (x86) 아래의 모든 것). 출력 창을 메모장 ++와 같은 앱에 복사하고 붙여 넣을 수 있고 정규식 찾기를 수행하고 빈으로 대체하여 모든 VS 포함을 트리에서 제거 할 수 있습니다.1>\s*Note: including file:\s*C:\\Program Files \(x86\).*(\r\n|\n|$)
kjhf

2
개별 소스 파일에 대해 / showIncludes를 토글 할 수 있지만 프로젝트 레벨에서 / showIncludes를 설정하지 않으면 아무런 영향을 미치지 않습니다.
David Carr

20

컴파일러는 / showIncludes 스위치도 지원합니다. 줄 번호는 제공하지 않지만 어디에서 왔는지에 대한 포괄적 인보기를 제공 할 수 있습니다.

프로젝트 설정-> 구성 속성-> C / C ++-> 고급-> 포함 포함에 있습니다.


+1 많은 감사합니다! (그러나 xtofl이 더 빨리 수락한다는 것을 두려워합니다).
RichieHindle

17

IncludeManager 가 매우 강력한 도구라는 것을 알았습니다 . 무료는 아니지만 비싸지는 않지만 포함 문제를 파악하고 사용하지 않은 많은 부분을 정리하여 컴파일 시간을 50 분에서 8 분으로 단축 할 수있었습니다.


5
아뿔싸! 문제가되는 파일에서 IncludeManager를 실행 한 후 크게 웃게하는 그래프가 생성되었습니다. 내 계산에 의하면 모든 것을보기 위해서는 400 "모니터가 필요하다. 우리가 도울 힘을 넘어선 것 같다. 8-)
RichieHindle

2
업데이트-IncludeManager 모회사 인 ProFactor (www.profactor.co.uk)는 영업을 중단했지만 위 웹 사이트에서 최신 릴리스를 무료로 제공하고 있습니다. 단점은 VS2005에서 VS2013까지 전체 버전의 Visual Studio에서만 작동한다는 것입니다.
Dana

5

gcc의 계층 적 포함 기능만큼 좋지는 않습니다. 이는 오류 발생시 직접 라인 포함 계층 구조를 보여줍니다. VS의 "include include"옵션은 모든 것을 보여줍니다. 이는 계층 포함 파일 문제를 디버깅 할 때 과도합니다.


나는 mingw와 함께 이미 5 년 동안 이것을 기다립니다.
fantastory

2
아마도 사용 방법, 문서 등의 세부 정보를 추가하십시오. 이 답변은 현재 많이 추가되지 않습니다.
Sam Brightman

4

다음 은 좋은 타사 FOSS 도구입니다. 발생 횟수 및 행 번호에 대한 데이터를 포함하는 결과를 XML로 내보낼 수 있습니다.


4

이제 Visual Studio 용 플러그인 인 IncludeToolbox가 있습니다. 종속 포함을 나열하고 무작위 제거 및 컴파일과 같은 더 많은 작업을 수행하여 포함이 필요한지 확인할 수 있습니다.



2

cl / P 는 행 번호를 표시하여 헤더 파일이 포함되는 위치를 컨텍스트에 알려줄 수 있습니다.

당신이 라인을 grep하면 ...

grep "^ # line"파일 .i

... 전처리기에 의해 어떤 파일이 순서대로 나왔는지를 명확하게 표시해야합니다.

일회성 사고 인 경우 이것은 매우 빠른 진단이어야합니다.


2
물론, 그것은 계층 구조가없는 8 천 라인의 비정형 출력을 제공합니다.
RichieHindle

나는 오랫동안 cl / P 출력을 살펴 보았고 더 나은 도구가 있는지 궁금했습니다. 이제 나는 그것이 있다는 것을 발견했습니다. 질문 일반적이며, 다른 사람들이 찾을 수 있도록 대답은 영원히 여기에있을 것입니다.
RichieHindle

0

내가 사용하는 Doxygen을 하고 graphviz를을 .

여기에 이미지 설명을 입력하십시오

둘 다 설치하십시오. 계층 다이어그램을 생성하는 도구로 GraphViz를 선택해야합니다. "GraphVix 패키지에서 도트 도구 사용"을 선택하십시오.

또한 GraphViz의 바이너리 디렉토리를 PATH 환경 변수에 포함시켜야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.