5

미리 컴파일 된 헤더가 설정되어 있는지 여부에 관계없이 프로젝트를 설정하는 것이 좋습니다. stdafx.hpp은 내 P.H입니다.미리 컴파일 된 헤더없이 컴파일 할 프로젝트 설정하기

내 주요 문제는 프로젝트 루트 디렉토리가 아닌 serveral 디렉토리에 파일이 있다는 것입니다. 나는 tryed이 무엇 :

  1. 만약 내가

    #include "stdafx.hpp" 
    

    사방에 PH 세트 잘 작동하지만 내가 그것을 비활성화하면 하위 디렉토리에있는 파일을 찾을 수 coudn't 있기 때문에, 불평 것입니다.

  2. I 하위 디렉토리에있는 파일에

    #include "../stdafx.hpp" 
    

    , 그것은 PH없이 잘 작동하지만 PH로, 컴파일러에 대한 stdafx.hpp 포함되지 불평합니다.

  3. 강제 포함 파일을 상대 경로 또는 절대 경로와 함께 stdafx.hpp으로 설정하면 컴파일러에서 오류가 발생합니다 (필자가 기억할 수는 없지만 재현해야 함).

그래서 해결책은 무엇입니까?

답변

6

표준 솔루션은 쉽습니다. 사전 컴파일 된 헤더 파일 (기본적으로 stdafx.h)을 포함하지 마십시오.

이 옵션은 지정된 모든 소스 파일의 첫 번째 회선에 자동 #include 지시문에 큰 따옴표를 사용하여 파일을 지정하는 것과 같은 효과가 있습니다 : 코드를 미리 컴파일 된 헤더로 컴파일해야하는 경우에는 /FI (Name Forced Include File) 컴파일러 스위치를 사용하여 명령 행, CL 환경 변수 또는 명령 파일에서.

이렇게하면 소스 코드를 수정하지 않고도 미리 컴파일 된 헤더 파일을 사용할 수 있습니다. 큰 따옴표가있는 #include 지시문을 사용

규칙은 #include Directive (C/C++) 아래에 설명되어 있습니다 :

인용 형태 :

  1. : 순서로 파일을 포함하기위한

    전처리 검색 #include 문을 포함하는 파일과 동일한 디렉토리에 있습니다.

  2. 현재 열려있는 포함 파일의 디렉토리가 열려있는 역순으로 표시됩니다. 검색은 상위 포함 파일의 디렉토리에서 시작하여 모든 조부모 포함 파일의 디렉토리를 통해 계속됩니다.
  3. 각/I 컴파일러 옵션에서 지정한 경로를 따라야합니다.
  4. INCLUDE 환경 변수로 지정된 경로를 따라야합니다.

당신이 설정의 어떤 조합이 없습니다

/FIstdafx.hpp 

쓰기 단순히 허용 할 미리 컴파일 된 헤더를 생성하는 데 사용되는 헤더 파일의 디렉토리를 포함하도록 /I (Additional Include Directories) 컴파일러 스위치를 사용하여/프로젝트 토폴로지 미리 컴파일 된 헤더를 단순히 토글 할 수 있습니다. /Y,/FI 및/I 컴파일러 스위치는 함께 사용하거나 완전히 제거해야합니다. 구성 집합을 단위로 변경하려면 속성 페이지를 사용할 수 있습니다 (자세한 내용은 Working with Project Properties 참조).

1

간단한 해결책은 포함 파일의 디렉토리에 관계없이 일반 #include "stdafx.hpp"이 항상 헤더를 찾도록 프로젝트의 포함 경로를 설정하는 것입니다.

의도하지 않게 다른 디렉토리의 헤더 파일을 볼 수 있다고 염려되는 경우 잠재적으로 사전 컴파일 된 헤더를 자체의 특수 디렉토리에 넣을 수도 있습니다.

관련 문제