0
点赞
收藏
分享

微信扫一扫

make编译结果同时输出到屏幕和文件

343d85639154 2022-03-30 阅读 85
linux

0.参考

make日志同时输出到控制台和文件及2」&1

将Linux下编译的warning警告信息输出到文件中[整理笔记]

1.Linux中的I/O流

shell 使用 3 种标准「I/O 流」,每种流与一种文件描述符相关联:

  • stdin 是标准输入流,向命令提供输入。文件描述符为 0。
  • stdout 是标准输出流,显示来自命令的输出。文件描述符为 1。
  • stderr 是标准错误流,显示来自命令的错误输出。文件描述符为 2。

Linux中,脚本语言环境中,即你用make xxx即其他一些普通 linux 命令,比如ls,find等,不同的数字,代表不同的含义:
数字 含义 标准叫法
0 标准输入 stdin = standard input
1 标准输出 stdout = standard output
2 标准错误输出 stderr = standard error

系统默认的stdin,stdout,stderr都是屏幕,所以当你执行命令,比如make后,所输出的信息都是可以在屏幕上看到的 。

所以想要将对应信息输出到某个文件中,就用对应的数字加上重定向符号’>’,实现将这些信息重新定向到对应的文件中。

2.make输出的I/O流的重定向

2.1.make > out.txtmake 1> out.txt把正常输出重定向到文件

make > out.txt没有显示的指明要把1或者2哪个的输出流定向到文件中,那么默认的就是把stdout,即标准输出重定向到文件中,make > out.txtmake 1> out.txt是等价的。此时由于没有更改stderr的输出,因此屏幕上仍然可以看到make的error(包括warning)。

如下图所示,右侧是命令行只显示了一些warning,左侧是out.txt文件只显示了编译过程中的正常输出。显然这种方式不实用。
在这里插入图片描述

2.2.make 2> out.txt把错误输出重定向到文件

这种方式相比上面的方式更加实用一点,就是把error(包括wanring)重定向到文件中,这样在平面上只剩下正常输出,如下图所示。

但是这种方式存在的问题是如果编译出现错误,不能明显的在屏幕上看到,还需要打开文件进行查看。
在这里插入图片描述

2.3.make 2>&1 | tee out.txt把所有输出都定向到文件同时保留屏幕显示

2>&1,2 和 1 分别是 stderr 和 stdout,即将 stderr 重定向到 stdout。如果写成 2>1 则表示 stderr 重定向到 1 这个文件,所以有了 2>&1 这样特别的语法。

这样的结果可以在保留屏幕输出的所有内容的同时,把屏幕输出内容保存到文件中,如下图所示。但是存在的一个缺点就是由于把stderr重定向到了stdout中,导致正常的stdout输出没有了颜色,暂时不知道如何解决。
在这里插入图片描述

注意:不可以用make | tee out.txt,因为make后面什么重定向都不加的话,默认是把1即stdout输出到文件中,而不包含stderr,如下图所示。
在这里插入图片描述

举报

相关推荐

0 条评论