使用 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"
目前我想调试我的包含。为此,我想获取经过预处理的代码,但没有任何系统头文件 - 只有我自己的代码。
我用标志 "-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"