2026/10/17 10:46:04

C语言——makefile的使用

C语言——makefile的使用 makefile如果有多个.c文件要编译用gcc编译每次都要重新输入每次要编很多如果出错改好又要全部都编一遍如gcc main.c add.c sub.c来把文件拼接成a.out,这是很浪费时间和编译效率的这时候用makefile可以提升效率使用规则如下写makefilemakefile 语法规则目标依赖文件列表Tab命令列表(1). 目标calc(2). 依赖文件main.c add.c sub.c(3). 命令列表就是生成目标所需要的命令(规则)具体使用操作如下需要三个文件为基本第一个是函数.c文件用于提供算法用第二个是头文件.h文件用于存放被调用的函数和定义结构体等等第三个是main函数.c文件专门调用dlinklist.h的函数来实现功能第四个是makefile文件用来定义项目编译规则执行 make 命令就能自动按依赖编译、更新目标文件避免重复编译。CCgcc CFLAGS-O linklist1: main1.o dlinklist.o gcc main1.o clinklist.o -O -o dlinklist1 main1.o: main1.c gcc -c main1.c -O -o main1.o dlinklist.o: dlinklist.c gcc -c dlinklist.c -O -o dlinklist.o clean: rm linklist1 rm *.o以上是最朴素版的makefile对main1.c和dlinklist.c的makefile没有任何自动变量以下是内置各种变量的makefile版本# 1 编译器变量CC指代gccCCgcc# 2 编译选项 CFLAGS-O 开启代码优化CFLAGS -O# 3 OBJ需要的目标文件列表.o文件OBJ main1.o dlinklist.o# 4 最终生成可执行程序名字TARGETlinklist1# 6 规则linklist1 依赖 main1.o dlinklist.o$(TARGET): $(OBJ)# 7 命令gcc 把所有依赖文件生成目标程序linklist1# $^ 代表所有依赖项$代表当前目标$(TARGET)$(CC) $^ $(CFLAGS) -o $#8 main1.o 依赖 main1.cmain1.o:main1.c#9 编译main1.c生成main1.o-c只编译不链接$代表第一个依赖文件$(CC) -c $ $(CFLAGS) -o $#10 dlinklist.o依赖dlinklist.cdlinklist.o:dlinklist.c#11 编译dlinklist.c生成dlinklist.o$(CC) -c $ $(CFLAGS) -o $#13 伪目标clean清理产物clean:#14 删除可执行文件linklist1rm $(TARGET)#15 删除所有 .o 目标文件rm *.o创建makefile文件的时候直接用vi makefile编译时用make -f makefile即可