我试图理解预编译头。所以我设置了以下示例项目:
pch.hpp
#include <vector>
pch.cpp
#pragma once
#include "pch.hpp"
矢量.hpp
#pragma once
#include "pch.h"
class Vector {
public:
Vector(const size_t N, const int init);
private:
std::vector<int> m_data;
};
矢量.cpp
#pragma once
#include "pch.hpp"
#include "Vector.hpp"
Vector::Vector(const size_t N, const int init)
: m_data(N, init) { }
源码.cpp
#include "pch.hpp"
#include "Vector.hpp"
int main() {
const Vector v1(3, 5);
}
我在 VS 2022 中通过将
pch.hpp
标记为 Project Properties --> C++ --> Pre-Compiled Headers --> Header File 和 Use (/Yu)
来完成此操作。并将 pch.cpp
设置为 Create (/Yc)
。
现在,当我删除
#include "pch.hpp"
或 Vector.cpp
中的 Source.cpp
时,我收到此错误:
File Vector.cpp
Line 10
Severity Error
Code C1010
Description unexpected end of file while looking for precompiled header.
Did you forget to add '#include "pch.hpp"' to your source?
但是,如果我禁用预编译头,一切都会编译正常。正如人们所期望的那样。
那么,似乎在启用预编译头的情况下,我现在需要将
#include "pch.hpp"
放入每个其他源文件中?即使 #include "Vector.hpp"
已经包含 pch.hpp
?是否可以避免将 #include "pch.hpp"
放入我的所有其他源文件中?
我问,因为我有一个更大的代码库(比上面的示例),并且我认为我基本上可以用
#include <vector>
替换 #include "pch.hpp"
的所有实例并完成。但是必须将 #include "pch.hpp"
添加到众多 cpp 文件中,需要我接触很多文件(并且似乎违反直觉)。
对可能天真的问题表示歉意,因为我是预编译标头的新手。
通过写作来尝试 #include“pch.hpp” 在文件的顶部或在每个 cpp 文件的第一行中