Linux操作——带函数的Makefile文件的编写

1、一般带函数的Makefile文件的编写

I、程序文件
在eg目录下分别新建main.c、add.c、sub.c、mul.c、hello.c、“Makefile”文件
其中main.c、add.c、sub.c、mul.c、hello.c程序文件的编写省略。
Makefile程序文件如下:

src = $(wildcard *.c)     
#Makeile中变量不需要类型
#例如:src=abc
#取变量的值用 $(变量) ==> $(src)  ==>  abc
#$(wildcard *.c)匹配当前目录下的所有.c文件	   
	
obj = $(patsubst %.c, %.o, $(src))  
#将src中的所有.c文件变为.o文件,再放到obj中
	
target = a.out

all:$(target)

$(target):$(obj)
	gcc $(obj) -o a.out  

main.o:main.c
	gcc -c main.c -o main.o
#gcc -c:对文件进行汇编,生成目标文件
#gcc -o:给生成的文件重命名

add.o:add.c
	gcc -c add.c -o add.o
	
sub.o:sub.c
	gcc -c sub.c -o sub.o
	
mul.o:mul.c
	gcc -c mul.c -o mul.o
	
clean:
	-rm -rf $(target) $(obj)

II、测试结果
root@lj:/eg# make
gcc -c add.c -o add.o
gcc -c main.c -o main.o
gcc -c mul.c -o mul.o
gcc -c sub.c -o sub.o
gcc add.o main.o mul.o sub.o -o a.out
root@lj:/eg# ./a.out
a + b = 3
a - b = -1
a * b = 30
结果同一般编写的Makefile文件运行结果相同,只是一些内容使用更具通用性的函数代替。

2、标准的Makefile文件的编写

I、程序
在eg目录下分别新建main.c、add.c、sub.c、mul.c、hello.c、“Makefile”文件
其中main.c、add.c、sub.c、mul.c、hello.c程序文件的编写省略。
Makefile程序文件如下:

src1 = $(wildcard ./src/*.c) 
#Makeile中变量不需要类型
#例如:src=abc
#取变量的值用 $(变量) ==> $(src)  ==>  abc
#$(wildcard *.c)匹配当前目录下的所有.c文件      
	
obj1 = $(patsubst ./src/%.c, ./obj/%.o, $(src1))  
#将./src目录下的所有.c文件变为.o文件,再存放到./obj目录下
	
target = ./bin/a.out
all:$(target)
#all/ALL最终要生成的目标,不要写命令
#将最终生成的a.out,存到./bin目录下
	
$(target):$(obj1)
	gcc $(^) -o $(@)  
#$(^):代表规则中的所有依赖文件,此处依赖文件文件是.o文件
#$(@):代表规则中的目标文件,此处目标文件是a.out文件
	
#a.out : main.o add.o mul.o sub.o 
#gcc main.o add.o mul.o sub.o -o a.out
	
$(obj1):./obj/%.o:./src/%.c	
	gcc -c $(^) -I ./include -o $(@) 
#因为依赖文件是.c文件,所以将.o文件转化为.c文件
#-I:指定头文件所在路径
#main.o:main.c
#	gcc -c main.c -o main.o
	
.PHONY:clean all
clean:
	-rm -rf $(target) $(obj1)
	

II、测试结果
root@lj:/eg# make
gcc -c src/add.c -I ./include -o obj/add.o
gcc -c src/main.c -I ./include -o obj/main.o
gcc -c src/mul.c -I ./include -o obj/mul.o
gcc -c src/sub.c -I ./include -o obj/sub.o
gcc obj/add.o obj/main.o obj/mul.o obj/sub.o -o bin/a.out
root@lj:/eg# cd bin
root@lj:/eg# ./a.out
a + b = 3
a - b = -1
a * b = 30
结果同一般带函数的Makefile文件运行结果相同。不过初始的依赖文件存放在src目录下,生成的.o文件被存放在obj目录下,生成的.out文件存放在bin目录下。

猜你喜欢

转载自blog.csdn.net/ypjsdtd/article/details/84820300
今日推荐