컴파일러 오류 C2857
/Ycfilename 명령줄 옵션으로 지정된 '#include' 문을 원본 파일에서 찾을 수 없습니다.
/Yc 옵션은 컴파일되는 원본 파일에 포함되지 않은 포함 파일의 이름을 지정합니다.
설명
소스 파일에서 /Yc파일 이름 옵션을 사용하여 미리 컴파일된 헤더(PCH) 파일을 만드는 경우 해당 원본 파일에 파일 이름 헤더 파일이 포함되어야 합니다. 지정된 파일 이름을 포함하여 원본 파일에 포함된 모든 파일이 PCH 파일에 포함됩니다. /Yu파일 이름 옵션을 사용하여 컴파일된 다른 원본 파일에서 PCH 파일을 사용하려면 파일 이름 포함이 파일의 첫 번째 주석이 아닌 줄이어야 합니다. 컴파일러는 포함하기 전에 원본 파일의 모든 항목을 무시합니다.
이 오류는 PCH 소스 파일에서 컴파일되지 않은 조건부 컴파일 블록의 문으로 인해 발생할 #include "filename"
수 있습니다.
예시
일반적인 사용에서 프로젝트의 원본 파일 하나는 PCH 원본 파일로 지정되고 하나의 헤더 파일은 PCH 헤더 파일로 사용됩니다. 일반적인 PCH 헤더 파일에는 프로젝트에서 사용되는 모든 라이브러리 헤더가 있지만 아직 개발 중인 로컬 헤더는 없습니다. 이 샘플에서 PCH 헤더 파일의 이름은 my_pch.h입니다.
// my_pch.h
#pragma once
#include <stdio.h>
PCH 소스 파일은 /Ycmy_pch.h 옵션을 사용하여 컴파일됩니다. 컴파일러가 이 PCH 헤더 파일의 포함을 찾지 못하면 C2857이 생성됩니다.
// my_pch.cpp
// Compile by using: cl /EHsc /W4 /Yumy_pch.h /c my_pch.cpp
#if 0
#include "my_pch.h" // C2857; remove conditional directives to fix
#endif
이 PCH 파일을 사용하려면 /Yumy_pch.h 옵션을 사용하여 소스 파일을 컴파일해야 합니다. PCH 헤더 파일은 PCH를 사용하는 원본 파일에 먼저 포함되어야 합니다.
// C2857.cpp
// Compile my_pch.cpp first, then
// compile by using: cl /EHsc /W4 /Yumy_pch.h my_project.cpp my_pch.obj
// Include the pch header before any other non-comment line
#include "my_pch.h"
int main()
{
puts("Using a precompiled header file.\n");
}