这听起来像是一个非常奇怪的问题,但我确实需要这个:我有一堆 c++ 头文件(来自一些仅包含头文件的库)和一个 cpp 文件。我想要做的是生成一个不包含任何内容的 cpp 文件。
为什么?对于一场比赛,其中编译器没有我正在使用的一些库,并且您只能提交一个 cpp 文件。
理想情况下,此“脚本”将创建一个仅使用实际需要的文件,而不仅仅是递归地复制和粘贴所有“#includes”。
我敢肯定,当您在代码中添加“#include”时,预处理器会生成一些文件。那么,我怎样才能看到这些中间文件和(可能很长的)文件呢?
最佳答案
GCC 提供了
-E
选项,因此它会在预处理文件后停止。 documentation有更多可应用于预处理器的选项。clang 也接受
-E
,如 here 所述.Visual Studio 提供了 /P (Preprocess to a File)编译器开关。它指示编译器:
Preprocess[es] C and C++ source files and write[s] the preprocessed output to a file.
输出被写入一个文件,该文件的文件名基于带有 .i 扩展名的源文件。要指定不同的文件名,请使用 /Fi (Preprocess Output File Name)编译器开关。
如果您传递
-E
选项(输出到 stdout
)或 -P
(输出到文件)。在 Windows 上,它们分别是 /E
和 /P
开关。 manual有这方面的更多信息。
关于C++:制作不包含的单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34781144/