当前我想调试我的包含。 为此,我希望得到预处理后的代码,但不需要任何系统头文件--只需要我自己的代码。
我用“-e”
和“-nostdinc”
标记进行了尝试。 但是我会得到错误,例如
丢失。 如何禁用这类预处理错误?
如何禁用这类预处理错误?
您可以创建一组标题文件,其名称与标准库标题匹配。 将这些头放在include目录中。 让文件为空。
使用clang或G++/GCC打印预处理后的代码,而不包括来自系统路径的文件
除了空报头方法之外,我还可以看到另外两种方法:
>
不要使用编译器的完整预处理器,而是编写您自己的只执行所需处理子集的预处理器。
或者,编写一个后预处理器,从预处理结果中移除标准头内容。
使用clang或G++/GCC打印预处理后的代码,而不包括来自系统路径的文件
这在GCC中是不容易实现的。 阅读有关如何调用gcc的内容。
但是您可以使用g++-c-e
获取所有预处理后的代码,并使用一些脚本(可能与GNU gawk一起使用)来删除无用的部分。 例如,请参见RefPerSys
当前我想调试我的包含。
我有一个习惯,就是生成所有的预处理代码,然后少用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"