0

미리 컴파일 된 헤더 (stdafx.h)를 사용하는 Visual Studio 2017 C++ 프로젝트가 있습니다. 다음과 같이Visual Studio 2017은 불필요하게 stdafx.h를 계속 재 컴파일합니까?

내 (간체) 파일 구조는 다음과 같습니다

header1.hpp 
header2.hpp 
stdafx.h -> includes header1.hpp 
code1.cpp -> includes stdafx.h 
code2.cpp -> includes stdafx.h and header2.hpp 

내가 파일의 라인 #include <header1.hpp>이 말은, includes header1.hpp을 말함으로써, 어떤 모호성을 방지하기 위해. (예상대로)

  1. 내가 stdafx.h을 수정 한 후

    , 모든 세 개의 파일 stdafx.h, code1.cppcode2.cpp은 재 컴파일된다.

  2. code1.cpp을 수정 한 후 (예상대로) code1.cpp 만 다시 컴파일됩니다.

  3. 내가 header2.cpp을 수정 한 후

    , stdafx.h, code1.cppcode2.cpp 재 컴파일 된 세 가지 파일 (예상하지!).

가 나는 항목 3 다른 단지 code2.cpp, 그리고 모든 것을 컴파일 할 것으로 예상했을 것이다.

가능한 원인은 빌드 관리자가 #include 지시문을 검사하고 따르지 않아서 헤더 파일이 수정되는 경우 모든 것을 다시 컴파일하기 때문입니다.

내 프로젝트가 상당히 크기 때문에 code1.cpp과 같은 모든 파일을 다시 컴파일하면 상당한 시간이 걸립니다. 나는 header2.hppstdafx.h에서 의도적으로 포함시키지 않았다. 왜냐하면 나는 header2.hpp을 종종 수정하고 단지 code2.cpp을 사용할 필요가 있기 때문이다. (header2.hpp은 기능이 code2.cpp 인 템플릿 라이브러리입니다.

이 동작이 필요하며 다른 파일을 다시 컴파일 할 필요가 없다는 것을 Visual Studio에서 인식하도록하려면 어떻게해야합니까?

+0

예상되는 동작처럼 보입니다. 미리 컴파일 된 헤더는 헤더가 변경 될 때마다 다시 컴파일됩니다. – Thebluefish

+0

Visual Studio에서 미리 컴파일 된 헤더를 다시 컴파일하지 않도록 지시하는 방법이 있습니까? – Bernard

+0

단순 - 미리 컴파일 된 헤더를 사용하지 마십시오. – Thebluefish

답변

0

내가 년 전 장애인 미리 컴파일 된 헤더를 가지고 있었다 (그러나 프로젝트에 stdafx.hstdafx.cpp 왼쪽) 밝혀, 나는 그들을 다시 사용하고자 할 때 나는 /YcYu 옵션을 설정하는 것을 잊었다.

오류가 제공되지 않았으며 Visual Studio는 일반 .cpp 파일과 마찬가지로 stdafx.cpp을 컴파일하고있었습니다.

또한 미리 컴파일 된 헤더가 작동하는 방식이 잘못되었습니다. 내가 stdafx.h (그 중간에 표현을 통해 그 #include "stdafx.h") 그 덤프.컴파일 된 얻을 생각하지만 실제로 컴파일 된 파일은 stdafx.cpp입니다 (및 컴파일하는 동안 .pch 파일을 생성합니다). (this question에 따라)

header2.cpp을 수정할 때 미리 컴파일 된 헤더 옵션을 켜면 code2.cpp 만 다시 컴파일됩니다.

또한 컴파일 시간이 현저히 빨라졌습니다.

관련 문제