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”输出。
围绕 gcc 写一个小包装器来做你想做的事,而不是 shell 技巧。
GCC 是开源软件。如有遗漏,欢迎补充。
g++ -save-temps -c file.cc
GCC 的开发者选项“-save-temps
”不依赖于 SHELL 技巧,也不会产生不需要的额外 STDERR 输出。相反,GCC 选项会生成两个文件(file.ii
和 file.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
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”输出。
围绕 gcc 写一个小包装器来做你想做的事,而不是 shell 技巧。
GCC 是开源软件。如有遗漏,欢迎补充。
g++ -save-temps -c file.cc
GCC 的开发者选项“-save-temps
”不依赖于 SHELL 技巧,也不会产生不需要的额外 STDERR 输出。相反,GCC 选项会生成两个文件(file.ii
和 file.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