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

时间:2016-02-21 14:29:18

标签: c++ gcc g++ c-preprocessor

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

类似的东西:

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

我知道我可以使用SHELL技巧过滤掉这个" -H" -output,但我想避免这种情况。

我只想将" -H" -output写入文件而不是STDERR。我不在乎这个输出由于某种原因必须与其他输出混合/交错,只要" -H" -output没有污染STDERR和正常的编译/链接警告/错误仍然印在STDERR上。

GCC的开发者选项" -save-temps"将整个预处理器输出保存到文件中,它不会保存" -H" -output。

2 个答案:

答案 0 :(得分:0)

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

  2. GCC是开源软件。如果缺少某些东西,请随意添加。

答案 1 :(得分:0)

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

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

在稍后阶段,例如,独立于构建系统/过程,此file.ii可以转换为类似于" -H" -output将具有的内容产生的。在csh SHELL中,您可以使用以下命令(或类似的东西)来实现此转换:

cat file.ii | grep '^# ' | awk '{a=$0;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