繁体   English   中英

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

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

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

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

如何禁用此类预处理错误?

您可以创建一组名称与标准库头文件匹配的头文件。 将这些标头放在包含目录中。 让文件为空。

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

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

  • 不要使用编译器的完整预处理器,而是编写您自己的预处理器,它只执行您想要的处理子集。

  • 或者,编写一个后预处理器,从预处理结果中删除标准 header 内容。

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

GCC不容易做到这一点。 阅读有关如何调用 GCC的信息。

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

目前我想调试我的包含。

我有生成所有预处理代码的习惯,然后少用 GNU来查看它。 磁盘空间很便宜。

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

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

为了解决这个问题,我通过以下方式创建了一个包含所有系统标题的文本文件:

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

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

然后我执行了以下代码行:

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

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

-isystem"F:\DummySTL"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM