学习Makefile的第一章:定义符

个人笔记系列:

认识makefile里面常用变量:

  • $^
  • $@
  • $?
  • $<
    变量一: $^
    所有的依赖的目标的集合,如果存在重复依赖目标的,那么这个变量就会去除掉重复的。就是剩下的所谓的目标的所有集合。

 PS:什么是目标文件,什么是依赖目标文件???? 
	  hell.o:main.c
	  gcc    main.c   -c   hello.o  
	  注:目标文件就是hello.o   依赖于main.c 。全文意思就是hello.o是依赖于main.c所生成的,
	  下面是表达怎么生成这么hello.o文件呢?是通过gcc 编译生成的。

	常用实例一、
deco:main.o  temp_1.o temp_2.o temp_3.o
	gcc -o  deco  temp_1.o  temp_2.o temp_3.o
	
使用我们的定义符之后,减少了很多的工作
deco:main.o     temp_1.o    temp_2.o temp_3.o
	gcc  -o  deco    $^
由上面可以看到$^ 就等于上面的所有的依赖目标(temp_1.o temp_2.o temp_3.o)

变量二: $@
表示目标文件的集合,要是编译多目标,那么就相当于匹配目标中模式定义的集合。

常用实例二、
	deco:main.o temp_1.o temo_2.o temp_3.o
		gcc   -o deco  $^
	使用这个定义符之后表达为
	
 deco:main.o temp_1.o temo_2.o temp_3.o
   gcc   -o  $@   $^
我们的目标文件是 deco 可以有$@替代

变量三: $?
一般在编程上面看到问号,不自觉地想象它是一个带有比较功能的符号,在这个也的确如此。它表示比目标还要新的依赖文件列表 。这里面关系到makefile的一个时间戳概念。意义就是进行更新时间的比较,一般在更新库或者日志这方面用到。

常用实例三、
	lib_dev:main.o temp_1.o  temp_2.o 
		ar -r  lib_dev  $?
	意思就是更新依赖文件的集合,(ar -r) 链接库如果依赖目标在则替换它,如果不在
	就加进最后一次修改过的依赖目标。如果temp_1.o更新了,那么$?集合里面只有
	temp_1.0,如果main.o temp_1.o都更新了,那么集合里面即有main.o  和 temp_1.o.

变量四: $<
1、依赖目标中的第一个目标,
2、如果依赖目标是以模式定义的,那么这个定义符是符合模式的一系列的文件集 合。分成两段概念来看这个定义符。

  首先实现第一段概念:实例4.1
	hello.o:main.c  sys_dev.c  sys_lib.c
		gcc -c hello.o  $<
	这里使用的 $< 依赖目标中的第一个目标,也就是实例中的 main.c 然后编译成hello.o,其他的依赖就不进行编译了。
	咋一看这个这样的用法好像有点神经病啊。请看下一个实例
	
实现第二段概念:实例4.2	ps:(%.o == 所有的.o文件),(%.c == 所有的.c 文件),
	%.o:%.c
		gcc -o  $@  $<
	那么在上面实例中$<是代表在一个一个地将.c文件取出来进行编译。有多少个.c文件 那么就对	应着生成多少个.o文件。
	
	实例4.2将其转换成平常写法:假设只有三个.c的文件,实例4.2的作用等同于下面实例4.3.
	
	实例4.3:
		sys_dev.o:sys_dev.c	
			gcc -c sys_dev.o  sys_dev.c

		sys_serve.o:sys_serve.c
			gcc -o sys_serve.o  sys_serve.c
			
	 	sys_bin.c:sys_bin.c
	 		gcc -o sys_bin.o   sys_bin.c	
	 	运行过后就会产生三个.o的文件。和实例4.2的作用是一样的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值