Linux中的Make,Makefile与进度条

Linux中的Make,Makefile与进度条


在Linux环境中,程序员经常需要编译和链接多个源代码文件以生成可执行文件。这个过程可能会非常耗时,尤其是当涉及到大型项目时。为了解决这个问题,Linux提供了一个名为“make”的工具,它可以自动化编译过程,使得程序员只需简单地运行一个命令就可以完成整个项目的编译。在这个过程中,Makefile文件扮演着至关重要的角色。此外,为了提高用户体验,我们还可以在编译过程中添加进度条。本文将介绍这三个概念及其在Linux中的应用。

Make

Make是一个自动化构建工具,它可以解决编译过程中的依赖关系问题。当程序员修改了一个源代码文件后,只需要运行make命令,make会自动检测哪些文件需要重新编译,并只编译那些需要更新的文件。这使得编译过程变得更加高效,尤其是在大型项目中。
例如使用make显示编译进度:

all: program
program: main.o utility.o
 echo "Compiling main.o"
 gcc -o main.o main.c 2>&1 | tee -a compile.log | awk '{print "Main.c compiled: " $0}'
 echo "Compiling utility.o"
 gcc -o utility.o utility.c 2>&1 | tee -a compile.log | awk '{print "Utility.c compiled: " $0}'
 echo "Linking program"
 gcc -o program main.o utility.o 2>&1 | tee -a compile.log | awk '{print "Program linked: " $0}'
.PHONY: clean
clean:
 rm -f *.o program compile.log

在这个例子中,我们使用了echo来打印出每个编译步骤的信息,同时使用tee命令将gcc的输出同时写入到一个日志文件中。然后我们使用awk来格式化输出,使其更具可读性。在每一步中,我们都显示了正在进行的步骤信息。最后,我们使用.PHONY来避免在执行clean目标时出现不必要的冲突。

Makefile

Makefile是一个文本文件,它包含了一系列的规则和指令,用于指导make如何自动构建程序。每个规则通常包括一个目标文件、依赖文件和一个命令,用于生成目标文件。例如:

target: dependency1 dependency2
    gcc -o target dependency1 dependency2

在这个例子中,目标文件是target,依赖文件是dependency1和dependency2。当dependency1或dependency2发生变化时,make会自动运行gcc命令来生成新的target文件。

all: program
program: main.o utility.o
 gcc -o program main.o utility.o
main.o: main.c
 gcc -c main.c
utility.o: utility.c
 gcc -c utility.c

在这个例子中,all是一个目标,它依赖于program。program依赖于main.o和utility.o。每行后面的命令是用于生成目标的步骤。

Makefile还可以包含一些特殊指令,如伪目标、条件判断、循环等,以实现更复杂的构建逻辑。

进度条

在编译大型项目时,由于涉及的文件数量众多,编译过程可能会持续很长时间。为了提高用户体验,我们可以在make的过程中添加进度条。这可以通过使用第三方工具pv来实现。pv是一个小而强大的命令行工具,它可以显示数据传输的进度。
首先,我们需要安装pv。在Debian/Ubuntu系统中,可以使用以下命令安装:

sudo apt-get install pv

然后,在运行make命令时,通过管道将输出传递给pv。例如:

make | pv -s $(du -sb . | cut -f1) > output.log 2>&1 &

这个命令会将make的输出重定向到output.log文件中,同时显示进度条。其中,$(du -sb . | cut -f1)用于计算当前目录下所有文件的大小,作为pv的进度条大小。最后的&表示将命令放到后台运行。

总结

在Linux环境中,make、Makefile和进度条是程序员必备的工具和技能。通过掌握这些知识,程序员可以更高效地进行项目开发,提高生产力。希望本文能对你有所帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值