4、编译输出重定向

​ 将 make 命令的标准输出(stdout)和标准错误输出(stderr)重定向到文件,以便于查看编译日志,快速分析定位问题。

1、重定向到同一个文件

语法:

make > output.log 2>&1
  • >:将标准输出(stdout)重定向到 output.log 文件。
  • 2>&1:将标准错误输出、标准输出 输出到 output.log 文件中。

例子:

希望将编译过程中所有的信息(包括错误信息)都保存到一个日志文件中。

make > build_output.log 2>&1

在这个例子中,build_output.log 文件将包含所有标准输出和标准错误输出。无论是编译成功的消息,还是错误信息,都会被保存在同一个文件中。

输出示例:

Compiling file1.c...
Compiling file2.c...
gcc: error: file3.c: No such file or directory
make: *** [Makefile:15: file3.o] Error 1

2、分别重定向到不同的文件

语法:

make > output.log 2> error.log
  • >:将标准输出重定向到 output.log 文件。
  • 2>:将标准错误输出重定向到 error.log 文件。

3、输出追加文件不覆盖文件

​ 默认情况下,> 会覆盖文件的内容。如果希望将新的输出追加到现有文件中,而不是覆盖原有内容,可以使用 >> 来追加。

语法:

make >> output.log 2>&1
  • >>:将标准输出追加到 output.log 文件中。
  • 2>&1:将标准错误输出也追加到 output.log 文件中。

例子:

​ 假设执行了多次 make 命令,并希望将每次的输出都追加到一个文件中,以便查看所有的构建日志。可以使用以下命令:

make >> build_output.log 2>&1

这样,每次执行 make 时,它的输出都会追加到 build_output.log 文件中,而不是覆盖之前的内容。

输出示例:

假设第一次执行时文件为空,第一次执行的输出:

Compiling file1.c...
Compiling file2.c...

第二次执行时,输出会追加到文件末尾:

Compiling file3.c...
Compiling file4.c...

4、同时输出到终端和文件

​ 如果希望将 make 命令的输出同时显示在终端上,并保存到文件中,可以使用 tee 命令。tee 会读取标准输入并将其内容输出到标准输出和文件中。

语法:

make 2>&1 | tee output.log
  • 2>&1:将标准错误输出(stderr)重定向到标准输出(stdout)。
  • |:将输出通过管道传递给 tee 命令。
  • tee output.log:将输出写入 output.log 文件,同时将其显示在终端上。

例子:

​ 在终端看到编译的过程,同时将日志保存到文件中,可以执行以下命令:

make 2>&1 | tee build_output.log

​ 这样做可以在终端中看到 make 命令的输出,并且所有的输出(包括标准输出和标准错误输出)会被写入到 build_output.log 文件中。

输出示例:

Compiling file1.c...
Compiling file2.c...
gcc: error: file3.c: No such file or directory
make: *** [Makefile:15: file3.o] Error 1

并且这些内容也会被保存到 build_output.log 文件中。

5、在 Makefile 中配置日志记录

​ 在 Makefile 中设置将输出重定向到文件,以便每次执行 make 时,自动将日志记录到文件中,如下:

all:
@echo "Building project..." > build.log 2>&1
make >> build.log 2>&1

​ 在这个示例中,make 会先将 Building project... 信息写入 build.log,然后将后续的所有 make 输出(包括错误信息)追加到同一个日志文件中。

八、make编译输出重定向的更多相关文章

  1. (转)Linux下的输入/输出重定向

    Linux环境中支持输入输出重定向,用符号<和>来表示.0.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>lee.dat 表示 ...

  2. Linux下的输入/输出重定向

    Linux环境中支持输入输出重定向,用符号<和>来表示.0.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>lee.dat 表示 ...

  3. Linux Shell 下的输出重定向

    linux 环境中支持输入输出重定向,用符号<和>来表示. 0.1和2分别表示标准输入.标准输出和标准错误信息输出, 可以用来指定需要重定向的标准输入或输出,比如 2>a.txt 表 ...

  4. linux进程后台运行及输出重定向

    本机环境为ubuntu 14.04 以ping www.baidu.com为例: 1.程序的前台运行 ping www.baidu.com 可以看到,屏幕上输出了baidu返回的结果 2.实现程序后台 ...

  5. unix下输出重定向

    > 为重定向符号 >> 重定向不覆盖原文件内容 example: 1. 标准输出重定向 echo "123" > /home/123.txt ---- 标准 ...

  6. [转]linux shell数据重定向(输入重定向与输出重定向)详细分析

      在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件 ...

  7. linux | 管道符、输出重定向

    1 输出重定向 ll > a.txt 将 ll的结果写入到a.txt 2 管道符 ls -la | grep h* 这条命令的理解为:ls -la 的结果作为gerp h* 的结果 gerp 是 ...

  8. python输出重定向

    0表示标准输入1表示标准输出2表示标准错误输出> 默认为标准输出重定向,与 1> 相同2>&1 意思是把 标准错误输出 重定向到 标准输出.&>file 意思是 ...

  9. 学习笔记之Shell脚本的输出重定向

    shell http://baike.baidu.com/link?url=qN3THt5ZJhQtwRJJkakWdz5-vZp4V9H3OmNP97XNhaoL-dqU-6rrFrYfHXmYv6 ...

  10. Linux实时将所有输出重定向到文件

    Linux的重定向机制十分好用,我们经常需要在服务器上挂起一个服务程序,然后将该程序的所有输出重定向到某个文件,这样即使我们注销了用户,程序依然在linux服务器上运行着. 但是重定向的输出经常无法实 ...

随机推荐

  1. DELPHI 检测服务器地址是否有效

    利用DELPH 的ICMP控件检测服务器地址 function CheckNetServer():Boolean; begin IdIcmpClient1.Host := '192.168.1.230 ...

  2. 认识知识库与知识图谱:从CDSS的前世今生聊聊模型幻觉问题

    提供AI咨询+AI项目陪跑服务,有需要回复1 今年很多医院已经部署上了DeepSeek,甚至有医生真的使用它对患者进行诊断,但马上就出问题了:AI 误诊,上海患者获赔 127 万. 不过,我去搜索详情 ...

  3. "油猴脚本""篡改猴"领域的一些基本常识

    本文简要介绍本人对"油猴脚本","篡改猴"领域的一些见解,内容注定不可能一步到位和事无巨细,欢迎各位仁人志士对我批评指正,提出意见建议.另外转载前请务必注明作者 ...

  4. udl(Universal Data Link)通用数据连接文件

    新建文本文档 更改后缀名为.udl(注意小点) 然后打开运行 配置并测试 改回后缀名.txt(有个小点哦) 打开就是了

  5. Lua中获取第二天凌晨的剩余时间

    在时间这个问题上,lua提供两大方法来供开发者使用,一个是os.time(),一个是os.date(),这两大方法可以满足日常开发的需求. 那么我们如何准确运用这两大方法呢. 在这一文章中我们先讲os ...

  6. 深度学习实战:从零构建图像分类API(Flask/FastAPI版)

    引言:AI时代的图像分类需求 在智能时代,图像分类技术已渗透到医疗影像分析.自动驾驶.工业质检等各个领域.作为开发者,掌握如何将深度学习模型封装为API服务,是实现技术落地的关键一步.本文将手把手教你 ...

  7. 一句话秒建公网站!AI边缘计算颠覆传统开发

    一句话就能让 AI 搭建一个公网可访问的完整网站: 短短几秒钟内,AI 便能完成所有构建操作: 这或许是目前全球最简便的建站方案: 本文使用的 AI 工具为腾讯云的 EdgeOne Pages MCP ...

  8. Java 中的 young GC、old GC、full GC 和 mixed GC 的区别是什么?

    Java 中的 young GC.old GC.full GC 和 mixed GC 的区别 在 Java 中,垃圾回收(GC)可以分为几种不同类型,包括 young GC.old GC.full G ...

  9. Vue3 中的5种常见的组件传值方式,Vue3事件总线(无需插件)

    Vue3 中常见的组件传值方式: Props:这是 Vue 中最常见的组件传值方式,即在父组件中定义 prop 并将数据传递给子组件. Event Bus:可以通过事件总线在两个组件之间进行通信,即定 ...

  10. 【记录】Python3|将元组/列表/集合或字典解析成多个参数传入函数,以及定义可变参数函数

    [说人话版] 将元组/列表/集合或字典直接作为多个函数参数传入,只需要添加*或**即可. 样例如下. 在Python中,将元组.列表.集合或字典作为多个函数参数传入是一种非常方便的技巧,可以帮助我们在 ...