Makefile 如何将叮当声诊断保存到文件中?

Makefile 如何将叮当声诊断保存到文件中?,makefile,clang,Makefile,Clang,我正在编写一个web服务器,主要是为了练习,并决定开始学习make和makefile。我的目标是自动构建我的vps,使用Clang/LLVM构建软件,并将诊断保存到文本文件中,以便脚本提交到我的电子邮件地址。我似乎无法实现的是将诊断保存到我的文件中 虽然我的Clang构建成功并生成了诊断,而且我的makefile似乎正常工作,但我未能从makefile内部和命令行重定向诊断 我的makefile(工作正常,但稍作修改以适应保存结果的需要): 我怀疑(这里我可能大错特错)发生这种情况是因为clan

我正在编写一个web服务器,主要是为了练习,并决定开始学习make和makefile。我的目标是自动构建我的vps,使用Clang/LLVM构建软件,并将诊断保存到文本文件中,以便脚本提交到我的电子邮件地址。我似乎无法实现的是将诊断保存到我的文件中

虽然我的Clang构建成功并生成了诊断,而且我的makefile似乎正常工作,但我未能从makefile内部和命令行重定向诊断

我的makefile(工作正常,但稍作修改以适应保存结果的需要):

我怀疑(这里我可能大错特错)发生这种情况是因为clang并没有真正返回诊断,它只是打印诊断。我不知道是否是这样,而《叮当用户指南》也没有这样的建议

[EDIT]:我玩了一下Clang,发现在成功编译时它返回0。我测试它的方法是:

$ clang <source_file.c>
$ echo $?
0
$clang
$echo$?
0
这表明我的理论可能是正确的,这使事情复杂化了:-\


有人能给我指出正确的方向吗?

像其他程序一样,Clang将诊断结果输出到stderr。您可以将stderr重定向到stdout,如下所示:

Ironman : 
    clang -o Ironman src/Ironman.c > report 2>&1

伟大的我开始怀疑它可能会向stderr报告,但仍然不知道如何重定向stderr的输出。这对我来说很有用,但是你能解释一下报表2>&1到底做了什么吗?
2>&1
表示将输出
2
(即stderr)重定向到输出
1
(即stdout)。因此,打印到stderr输出的所有内容都被重定向到stdout,您通过执行
>report
@NlightNFotis将stdout重定向到
report
:只是为了澄清:重定向是一个shell特性,而不是Clang或make特性。make将整个线传递到shell;shell解释
>报告
2>&1
部分,并从传递给clang的参数列表中省略它们。因此,这些重定向和其他重定向都记录在shell的手册中。
Ironman : 
    clang -o Ironman src/Ironman.c > report 2>&1