6

这听起来像是一个非常奇怪的问题,但我确实需要这个:我有一堆 c++ 头文件(来自一些仅头文件的库)和一个 cpp 文件。我想做的是生成一个不包含任何内容的单个 cpp 文件。

为什么?对于一场比赛,其中编译器没有我正在使用的一些库,并且您只能提交一个 cpp 文件。

理想情况下,这个“脚本”将创建一个只使用实际需要的文件,而不仅仅是递归地复制和粘贴所有“#includes”。

我确信当您在代码中添加“#include”时预处理器会生成一些文件。那么,我怎样才能看到这些中间文件和(可能很长)文件?

4

1 回答 1

8
  • GCC提供了该-E选项,因此它在预处理文件后停止。该文档有更多可应用于预处理器的选项。

  • clang也接受,如此-E所述。

  • Visual Studio提供/P(预处理到文件)编译器开关。它指示编译器:

    预处理[es] C 和 C++ 源文件并将预处理的输出写入[s] 文件。

    输出被写入一个文件,文件名基于源文件,扩展名为 .i。要指定不同的文件名,请使用/Fi(预处理输出文件名)编译器开关。

  • -E如果您传递选项(输出到stdout)或-P(输出到文件),英特尔 C++ 编译器将在预处理后停止。在 Windows 上,这些将分别是/E/P开关。该手册对此有更多信息。

于 2016-01-14T03:28:20.687 回答