Makefile常见符号意思

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_37659294/article/details/92848165

    Makefile里有许许多多的符号,对于新手而言如果没有经常使用,就很容易忘记,所以我把常见符号的意义写下,方便日后忘记查询。本文章会持续更新...

 

1.$@:代表目标;$^代表所有依赖,$^代表第一个依赖。

         eg:下图的$@代表目标名test,$^代表所有依赖,即test.c和seqlist.c,所以相当于gcc -O0 -g -Wall -o test test.c seqlist.c。


 
 
  1. CC = gcc                             #使用gcc编译器
  2. CFLAGS =-O 0 -g -Wall                 #-O0代表编译的时候不进行相应的优化;
  3. #-g代表可以使用gdb进行相应的调试,编译的时候会添加一些调试信息
  4.   #-Wall把警告信息全都打印出来
  5. test:test.c seqlist.c
  6. $(CC) $(CFLAGS) -o $@ $^

2..PHONY:假设我们的makefile所在目录下,刚好有名为clean的文件,那么我们执行make clean这条规则时并不能执行rm *.o test,如果加上.PHONY:,则可以成功执行rm *.o test.(因为每条规则下的命令被执行必需满足以下情况之一:1.目标在当前路径不存在;2.某个依赖比目标“新”,假如我们当前路径有clean文件,而Makefile里面的clean又没有依赖文件,所以就会发生错误啦!)


 
 
  1. test: a.o b.o c.o
  2. gcc -o test $^
  3. %.o : %.c
  4. gcc -c -o $@ $<
  5. clean:
  6. rm *.o test
  7. .PHONY: clean

3.

:=   # 即时变量,A := xxx   # A的值即刻确定,在定义时即确定
=    # 延时变量,B = xxx    # B的值使用到时才确定
?=   # 延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句
+=   # 附加, 它是即时变量还是延时变量取决于前面的定义


 
 
  1. A := $(C) #即时变量,定义时即确定,因为变量C还未赋值,所以A为空
  2. B = $(C) #延时变量,用到时才确定,所以打印B为abc 123
  3. C = abc
  4. D = AABBCC
  5. D ?= 123456 #在上一行已经定义了变量的,所以根据?=的特性,D打印出来是AABBCC
  6. all:
  7. @echo A = $(A)
  8. @echo B = $(B)
  9. @echo D = $(D)
  10. C += 123

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值