.h.gch 파일이란 무엇입니까?


116

최근에 G ++로 프로그램을 만들어야하는 수업 프로젝트가있었습니다.

나는 메이크 파일을 사용했고 어떤 이유로 가끔 .h.gch 파일을 남겼습니다.

때로는 이것이 컴파일에 영향을 미치지 않았지만, 종종 컴파일러가 수정되었거나 의미가없는 문제에 대해 오류를 발생시키는 결과를 낳았습니다.

두 가지 질문이 있습니다.

1) .h.gch 파일이란 무엇이며 어떤 용도로 사용됩니까? 과

2) 청소하지 않으면 왜 그런 문제가 발생합니까?


13
gcc는 실수로 .h 파일을 컴파일하도록 지시하면 생성합니다. 하지 마십시오 :) (실제로 미리 컴파일 된 헤더를 만들고 싶지 않다면)
jalf

3
GCC 세계 외부 에서는 .gch 파일을 .pch 라고 합니다.
Patapoom

답변:


115

.gch파일은 미리 컴파일 된 헤더이다.

만약 .gch 다음을 찾을 수없는 일반적인 헤더 파일이 사용됩니다.

그러나 프로젝트가 미리 컴파일 된 헤더를 생성하도록 설정된 경우 존재하지 않는 헤더를 만들고 다음 빌드에서 사용합니다.

때때로는 *.h.gch손상되거나 오래된 정보를 포함하므로 해당 파일을 삭제하고 다시 컴파일하면 문제가 해결됩니다.


1
그렇다면 .gch의 크기가 일반적으로 그렇게 큰 이유는 무엇입니까?
NAND

38

파일에 대해 알고 싶다면 터미널에 입력하기 만하면됩니다.

file filename

file a.h.gch 제공합니다 :

GCC precompiled header (version 013) for C

2
Mine (OSX, zsh)은 .h.gch파일에 대해 "데이터"라고 말합니다 . 이를 위해 적절한 데이터베이스 파일이 필요하다고 생각합니다.
Ondrej Slinták



15

다른 답변은 gch 파일이 무엇인지와 관련하여 완전히 정확합니다. 그러나 컨텍스트 (이 경우 g ++를 사용하는 초보자)가 전부입니다. 이 맥락에서 두 가지 규칙이 있습니다.

  1. 절대로 g ++ 컴파일 라인에 .h 파일을 넣지 마십시오. .cpp 파일 만. .h 파일이 실수로 컴파일 된 경우 * .gch 파일을 제거하십시오.

  2. 절대로 #include 문에 .cpp 파일을 넣지 마십시오.

규칙 1이 위반되면 어떤 시점에서 질문에 설명 된 문제가 발생합니다. 규칙 2가 깨지면 링커는 곱셈으로 정의 된 기호에 대해 불평 할 것입니다.


2
첫 번째 요점에서는 함수를 예로 사용하겠습니다. 프로그래머가 myfunc ()를 호출하기 전에 프로그래머는 함수 프로토 타입을 사용하여 컴파일러에 myfunc ()를 설명해야합니다. 여러 다른 .cpp 파일이 myfunc ()를 호출하는 경우 각 .cpp에 프로토 타입을 제공해야합니다. 각 .cpp 파일에 프로토 타입을 입력하면 오류가 발생하기 쉽습니다. 따라서 함수 프로토 타입은 myfunc가 호출되는 각 .cpp 파일에 #included .h 파일에 배치됩니다. 헤더 파일에는 실행되는 코드가 아닌 컴파일러에 대한 정보 만 포함됩니다. 따라서 g ++ 줄에 .h 파일을 넣는 것은 의미가 없습니다.
tgibson

규칙 2에서 템플릿 기능의 정의가있는 경우 #include .cpp 파일
NAND
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.