当在Linux系统中使用make
命令时,它会根据Makefile
文件中定义的规则和依赖关系来构建项目。Makefile
文件包含了一组规则,每个规则描述了如何从源文件生成目标文件。下面是一个简单的示例,演示如何使用make
和Makefile
来构建一个C语言项目,并在构建过程中显示进度条。
首先,创建一个名为Makefile
的文件,并将以下内容添加到其中:
CC = gcc CFLAGS = -Wall SRC = main.c file1.c file2.c OBJ = $(SRC:.c=.o) TARGET = my_program all: $(TARGET) $(TARGET): $(OBJ) $(CC) $(CFLAGS) -o $(TARGET) $(OBJ) @echo "Build completed successfully!" %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ @echo "Compiled $<" clean: rm -f $(OBJ) $(TARGET) @echo "Cleanup completed successfully!" .PHONY: all clean
上述Makefile
定义了以下规则:
CC
和CFLAGS
分别指定了使用的编译器和编译选项。
SRC
变量列出了项目中所有的源文件。
OBJ
变量通过将源文件的后缀从.c
替换为.o
来生成对应的目标文件列表。
TARGET
变量指定了生成的可执行文件的名称。
all
规则是默认规则,它依赖于$(TARGET)
规则,用于构建整个项目。
$(TARGET)
规则指定了如何从目标文件生成可执行文件。
%.o: %.c
规则定义了如何从源文件生成目标文件的通用规则。
clean
规则用于清理生成的目标文件和可执行文件。
接下来,创建一个名为progress.sh
的Shell脚本文件,用于显示进度条。将以下内容添加到该文件中:
#!/bin/bash echo "Building project..." echo "====================" count=0 total=${#SRC[@]} # 源文件的总数,假设存储在SRC数组中 for src in ${SRC[@]}; do count=$((count+1)) percent=$((count*100/total)) echo -n "$percent% [$((count))/${total}]" for ((i=0; i<$percent; i++)); do echo -n "=" done for ((i=$percent; i<100; i++)); do echo -n " " done echo -n " [$(basename $src .c)].o" echo "" # 换行显示进度条 done echo "" # 空行作为进度条完成后的分隔符
在上述脚本中,我们使用了一个简单的进度条算法来计算和显示进度。它会根据源文件的总数计算出每个源文件的进度百分比,并打印出相应的进度条。进度条由等号(=)表示已完成的部分,空格表示未完成的部分。在进度条的右侧还会显示当前正在编译的源文件名称。
最后,在终端中运行以下命令来构建项目并显示进度条:
make -f Makefile all | progress.sh