有没有办法检查GCC是否使用预编译头?
另外,我生成 pch.h.gch
文件,如下所示:
g++ -std=c++20 -Wall -O3 -flto pch.h -o pch.h.gch
但生成的文件始终命名为 pch.h
并且不带 .gch
扩展名。为什么会发生这种情况?它用于自动添加扩展名。但现在不行了。
编辑:另一个问题是,是否有必要在预编译头中添加包含保护(例如#pragma Once)?
最佳答案
问题是:
How to know if compiler is taking advantage of the pch.h.gch file?
具有以下源文件:
==> f.hpp <==
static inline int f() { return 1; }
==> main.cpp <==
#include "f.hpp"
int main() {
return f();
}
我们可以检查gcc
进行的系统调用,看看它是否打开了预编译头:
$ gcc f.hpp
$ strace -e openat -ff gcc -c main.cpp 2>&1 | grep 'f\.hpp\.gch'
[pid 877340] openat(AT_FDCWD, "f.hpp.gch", O_RDONLY|O_NOCTTY) = 4
我们在上面看到 gcc
打开,因此我们假设 gcc 使用 f.hpp.gch
。
关于c++ - 如何知道编译器是否正在利用 pch.h.gch 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70142090/