3-makefile文件编写

makefile文件编写

1.格式

自上而下地完成整个项目的编译

目标文件:需要文件

​ command

2.案例

自上而下地完成

首先创建文件makefile

math.exe:main.o add.o sub.o
g++ main.o add.o sub.o -o math.exe
main.o:main.c
g++ -c main.c -o main.o
add.o:add.c
g++ -c add.c -o add.o
sub.o:sub.c
g++ -c sub.c -o sub.o

clean:
rm -f *.o math.exe
3.使用makefile
make		#自下而上地执行makefile命令
make clean #执行clean标签命令
4.简化写法
math.exe:main.o add.o sub.o
g++ *.o -o $@
%.o:%.c
g++ -c $< -o $@

clean:
rm -f *.o math.exe

说明:

  • $@代指目标文件名

  • *.o代指所有.o文件

  • $<代指对每一个需要的文件进行遍历命令

5.创建变量与使用变量

好处,便于修改(本例可以将gcc修改为g++)

CC = gcc

math.exe:main.o add.o sub.o
$(CC) main.o add.o sub.o -o math.exe
main.o:main.c
$(CC) -c main.c -o main.o
add.o:add.c
$(CC) -c add.c -o add.o
sub.o:sub.c
$(CC) -c sub.c -o sub.o

clean:
rm -f *.o math.exe
6.makefile编译多个可执行文件

makefile只执行第一条语句,并根据第一条语句的依赖,执行后续生成这些依赖的语句。

如下语句,只会生成main_max,不会生成main_min

main_max:main_max.o find_max.o				#执行
gcc main_max.o find_max.o -o main_max

main_min:main_min.o find_min.o #不执行
gcc main_min.o find_min.o -o main_min

main_max.o:main_max.c #执行
gcc -c main_max.c -o main_max.o

find_max.o:find_max.c #执行
gcc -c find_max.c -o find_max.o

main_min.o:main_min.c #不执行
gcc -c main_min.c -o main_min.o

find_min.o:find_min.c #不执行
gcc -c find_min.c -o find_min.o

解决方法:使用all指令,将两个最终可执行文件作为all的依赖

all:main_max main_min						#第一步执行

main_max:main_max.o find_max.o #执行
gcc main_max.o find_max.o -o main_max

main_min:main_min.o find_min.o #执行
gcc main_min.o find_min.o -o main_min

main_max.o:main_max.c #执行
gcc -c main_max.c -o main_max.o

find_max.o:find_max.c #执行
gcc -c find_max.c -o find_max.o

main_min.o:main_min.c #执行
gcc -c main_min.c -o main_min.o

find_min.o:find_min.c #执行
gcc -c find_min.c -o find_min.o