2016-12-08 1 views
0

미리 컴파일 된 헤더에서 원래 파일 이름 (파일 경로)과 컴파일 언어를 추출 할 수 있습니까? Clang이 llvm-bcanalyzer (LLVM 비트 코드 분석기)을 사용하는 것이 가능하다는 것을 알고 있습니다. 그래서 아무도 GCC를 도와 줄 수 있습니까?미리 컴파일 된 헤더의 원본 파일 이름

+0

미리 컴파일 된 헤더는 대부분 (변환 된) .h 파일을 결합합니다. 무엇을 정확하게 추구해야할까요? – kay

+0

미리 컴파일 된 헤더의 원본 인 원래 헤더 이름을 찾으려고했습니다. 문서에 따르면 다음 명령을 사용하여 PHC를 만들 수 있습니다. gcc -x c-header ** test.h ** -o test.h.gch. 내 경우에는 ** test.h ** – vromanik

+0

예 경로를 추출하고 싶습니다. Clang은 그 정보 (Clang PHC 내부 메타 데이터) (http://clang.llvm.org/docs/PCHInternals.html#ast-file-contents)를받을 수 있습니다. – vromanik

답변

2

clang의 경우 프리 프로세서 출력을 구문 분석하기 만하면 원래 PCH 파일 이름을 쉽게 추출 할 수 있습니다. 예에서 header/header.h은 원본 헤더이고 pch/pch.h.gch은 미리 컴파일 된 헤더입니다.

예를 들어, 다음과 명령

: clang -E -include pch/pch.h main.cpp 반환은 우리가 원래 PCH 파일 이름을 찾을 수있는 검색 결과 :

… 
# 1 "/Users/user/pch_example/header/header.h" 1 
… 
# 1 "main.cpp" 2 
int main() {return 42;} 

불행하게도 구문 분석 처리기 출력이 -fpch-preprocess 옵션을 사용하는 경우에도 GCC 우리에게 도움이되지 않습니다. 그래서 내가 발견 한 유일한 방법은 -MD (or -MMD) 같은 의존성 추적 플래그를 사용하여 PCH를 컴파일하는 것입니다.

예를 들어 다음 명령을 호출 할 수 있습니다. gcc-6 -MMD -x c++-header header/header.h -o pch/pch.h.pch. 이 경우 GCC는 추가적으로 원본 PCH 파일 이름에 대한 경로를 포함하는 종속 파일 pch/pch.h.d을 생성합니다.

관련 문제