GCC 可选预处理器一次输出和编译

GCC optional preprocessor output and compilation in one pass

GCC 的预处理器选项“-H”打印用于 STDERR 的每个头文件的名称。是否可以将此输出转发到一个文件,而不是让它打印到 STDERR,并让 GCC 一步继续编译?

类似于:

gcc -H=file.h -c file.cc

我知道我可以使用 SHELL 技巧来过滤掉这个“-H”输出,但我想避免这种情况。

我只想将“-H”输出写入文件而不是 STDERR。我不在乎这个输出是否出于某种原因必须 mixed/interleaved 与其他一些输出,只要“-H”-输出不污染 STDERR 和正常 compilation/linking warnings/errors仍在打印到 STDERR。

虽然 GCC 的开发人员选项“-save-temps”将整个预处理器输出保存到一个文件,但它不会保存“-H”输出。

  1. 围绕 gcc 写一个小包装器来做你想做的事,而不是 shell 技巧。

  2. GCC 是开源软件。如有遗漏,欢迎补充。

g++ -save-temps -c file.cc

GCC 的开发者选项“-save-temps”不依赖于 SHELL 技巧,也不会产生不需要的额外 STDERR 输出。相反,GCC 选项会生成两个文件(file.iifile.s),其中 file.ii 包含预处理器输出。

在稍后阶段,例如,独立于构建 system/procedure,此 file.ii 可以转换为类似于“-H”输出的结果。在 csh SHELL 中,您可以使用以下命令(或类似命令)来实现此转换:

cat file.ii | grep '^# ' | awk '{a=[=17=];gsub(/"/,"",a);split(a,b);if(/\" 1/){split(c,d," ");c=d[1]". ";print c b[3]}if(/\" 2/){split(c,d,". ");c=d[1]" "}}' > file.h