c++ - 如何知道编译器是否正在利用 pch.h.gch 文件?

标签 c++ gcc gnu-make precompiled-headers

有没有办法检查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/

相关文章:

C++ 正则表达式字符串捕获

c++ - 为什么 `-fvisibility-inlines-hidden` 不是默认值?

C++:在函数调用中省略参数值是否有效?

c - 段错误的根本原因

java - 似乎不包含 CMakeLists.txt

c++ - 使用巨大 vector 卡住 C++ 程序

makefile - CENTOS - Linux - Make - Makefile(获取用户输入不起作用)

C - 函数具有内部链接但未定义

c++ - sscanf 多个输入

c - Makefile递归不传递CPPFLAGS