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。
答案 0 :(得分:0)
在gcc周围写一个小包装来做你想做的事,而不是shell技巧。
GCC是开源软件。如果缺少某些东西,请随意添加。
答案 1 :(得分:0)
g++ -save-temps -c file.cc
GCC的开发者选项" -save-temps
"不依赖于SHELL技巧,也不会产生不必要的额外STDERR输出。相反,GCC选项会生成两个文件(file.ii
和file.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