对Makefile的浅显理解2

对Makefile的浅显理解2

设置makefile中文件的搜索路径

在makefile中,可以通过给VPATH赋值来设置规则中目标文件和依赖文件的搜索目录。Make首先搜索当前目录,如果未找到依赖的文件,make将按照VPATH中给的目录依次搜索VPATH对makefile中所有文件都有效。
如:VPATH = src : …/headers
上面的的定义指定两个目录,“src”和“…/headers”,make 会按照这个顺序进行搜索。目录由“冒号”分隔。(当前目录是最高优先搜索的地方)
也可以使用指令vpath,与VPATH在使用上的区别是:vpath可以给不同类文件指定不同的搜索目录。如:
vpath %.c /src
vpath %.h …/headers
vpath %.c 表示清除所有vpath对%.c设置的搜索目录(后面不带路径)

定义变量和引用变量

变量的定义和应用与Linux环境变量一样,变量名要大写,变量一旦定义后,就可以通过将变量名用圆括号括起来,并在前面加上“$”符号来进行引用。
变量的主要作用:
1、保存文件名列表
2、保存可执行命令名,如编译器
3、保存编译器的参数
变量一般都在makefile的头部定义。按照惯例,所有的makefile变量都应该是大写。

GNU make的主要预定义变量

$* 不包括扩展名的目标文件名称
$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件
$< 第一个依赖文件的名称
$? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚
$@ 目标的完整名称
$^ 所有的依赖文件,以空格分开,不包含重复的依赖文件
$% 如果目标是归档成员,则该变量表示目标的归档成员名称

3个常用的预定义变量

1.  $@     表示要生成的目标
2.  $^     表示全部的依赖文件
3.  $<     表示第一个依赖文件
bin/cn_work : obj/main.o  obj/cn_work.o  obj/fun.o   
	gcc  $^  -o $@  (命令一定要用以Tab开头)
obj/cn_work.o : sources/cn_work.c 
	gcc  -I  headers   -c 	$<	-o  $@
obj/main.o : 	sources/main.c
	gcc  -I  headers   -c 	$<	-o  $@
obj/fun.o  :	 sources/fun.c
	gcc  -I  headers   -c 	$<	-o  $@
clean:
	rm -f bin/cn_work file_o/*.o

gcc 的3个参数:

  1. -o 指定目标文件
    gcc sources/main.c -o bin/main
  2. -c 编译的时候只生产目标文件不链接
    gcc -c sources/main.c -o obj/main.o
  3. -I 主要指定头文件的搜索路径
    gcc -I headers -c main.c -o main.o

猜你喜欢

转载自blog.csdn.net/weixin_46259642/article/details/113565548