コンパイラ エラー C2857
/Ycfilename コマンド ライン オプションで指定された '#include' ステートメントは、ソース ファイルに含まれていません
/Yc オプションは、コンパイルするソース ファイルに含まれていないインクルード ファイルの名前を指定します。
解説
ソース ファイルで /Ycfilename オプションを使用してプリコンパイル済みヘッダー (PCH) ファイルを作成する場合、そのソース ファイルには filename ヘッダー ファイルが含まれている必要があります。 ソース ファイルに含まれるすべてのファイル (指定された filename までを含む) は、PCH ファイルに含まれます。 PCH ファイルを使用するために /Yufilename オプションを使用してコンパイルされた他のソース ファイルでは、filename のインクルードがコメント以外の最初の行である必要があります。 コンパイラは、このインクルードの前に、ソース ファイル内のすべてのものを無視します。
このエラーは、PCH ソース ファイルでコンパイルされていない、条件付きのコンパイル ブロックの #include "filename"
ステートメントが原因で発生する可能性があります。
例
一般的な使用法では、プロジェクト内の 1 つのソース ファイルが PCH ソース ファイルとして指定され、1 つのヘッダー ファイルが 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");
}