使用 clang 或 g++/gcc 打印预处理代码而不包括来自系统路径的文件

Using clang or g++/gcc to print preprocessed code without including files from system paths

目前我想调试我的包含。为此,我想获取经过预处理的代码,但没有任何系统头文件 - 只有我自己的代码。

我用标志 "-E""-nostdinc" 试过了。但是后来我收到错误,例如 <string> 丢失了。如何禁用此类预处理错误?

How to disable such preprocessing errors?

您可以创建一组 headers 文件,其名称与标准库 headers 匹配。将那些 header 放在包含目录中。让文件为空。

Using clang or g++/gcc to print preprocessed code without including files from system paths

除了空 header 方法之外,我还可以看到另外两种方法:

  • 与其使用编译器的完整 pre-processor,不如编写您自己的 pre-processor,它只执行您想要的处理子集。

  • 或者,编写 post-pre-processor 从 pre-processed 结果中删除标准 header 内容。

Using clang or g++/gcc to print preprocessed code without including files from system paths

这对于 GCC. Read about how to invoke GCC 来说并不容易。

但是您可以使用 g++ -C -E 获得 所有 预处理代码,并使用一些脚本(可能使用 GNU gawk)删除无用的部分。

currently I'd like to debug my includes.

我有生成所有预处理代码然后使用GNU less查看其中的习惯。磁盘 space 很便宜。

或者,考虑编写您自己的 GCC plugin 来满足您的需要。

(这不是真正的答案 - 只是一个“hack”)

为了解决这个问题,我创建了一个包含所有系统头文件的文本文件:

rem my GCC STL-PATH
cd Z:\usr\include\c++

dir /b > F:\DummySTL\files.txt

然后我执行了下面一行代码:

for /f "delims=" %F in (files.txt) do copy nul "%F"

这会为文件中的每一行创建一个空文本文件。 现在我可以调用 gcc 或 clang 了:

-isystem"F:\DummySTL"