这可能听起来像一个非常奇怪的问题,但我确实需要这个:我有一堆c ++头文件(来自一些只有头的库)和一个cpp文件。我想做的是生成一个没有包含任何内容的单个cpp文件。
为什么呢?对于比赛,编译器中没有我正在使用的库,而且只能提交一个cpp文件。
理想情况下,这个“脚本”会创建一个仅使用实际需要的文件,而不仅仅是复制和粘贴所有“#includes”。
我确信在代码中添加“#include”时,预处理器会生成一些文件。那么,我怎样才能看到这些中间文件(可能很长)?
答案 0 :(得分:6)
GCC 提供-E
选项,因此在预处理文件后会停止。 documentation有更多选项可以应用于预处理器。
clang 也接受-E
,如here所述。
Visual Studio 提供/P (Preprocess to a File)编译器开关。它指示编译器:
预处理[es] C和C ++源文件,并将预处理的输出写入文件。
输出将写入文件名,文件名基于源文件,扩展名为.i。要指定其他文件名,请使用/Fi (Preprocess Output File Name)编译器开关。
英特尔C ++编译器将在预处理后停止,如果您通过-E
选项(输出到stdout
)或-P
(输出到文件)。在Windows上,这些将分别是/E
和/P
开关。 manual有更多相关信息。