c语言学习笔记二十一

makefile中关于变量的语法规则


示例代码如下:
foo = $(bar)
bar = Huh?


all:
@echo $(foo)


执行make后输出: Huh?


优点: 可以把变量的值推迟到后面定义






示例代码:
main.o:main.c
$(CC) $(CFAGS) $(CPPFLAGS) -C $<
CC=gcc
#编译选项
CFAGS= -O -g 
#预处理选项
CPPFLAGS= -Iinclude


编译展开后为:
gcc -O -g -Iinclude -c main.c






示例代码:
x := foo
#$(x)会立即展开
y := $(x) bar


#定义一个变量的值是空格
nullstring :=
space := $(nullstring)


x := fbb
#$(x)不会立即展开
# y如果没有定义过,就按=处理,如果已经定义就不作任何操作
y ?= $(x) bar


objects = main.o
#可以给变量追加值
#如果objects = main.o用=定义,不会立即展开
#objects := main.o用:=定义,会立即展开
objects += $(foo)
foo = foo.o bar.o




all:
@echo "-$(y)-"   
@echo "--$(space)--"
@echo "---$(y)---"
@echo "----$(objects)----"


 
输出结果为:


-foo bar-
-- --
----foo bar---
----main.o foo.o bar.o----


常用的特殊变量有:


     $@,表示规则中的目标。 


     $<,表示规则中的第一个条件。 


     $?,表示规则中所有比目标新的条件,组成一个列表,以空格分隔。 


     $^,表示规则中的所有条件,组成一个列表,以空格分隔。 




示例代码:
test34:test34.o test33.o test31.o
(这里是个tab) gcc test34.o test33.o test31.o -o test34


可以改写为:
test34:test34.o test33.o test31.o
(这里是个tab) gcc $^ -o $@


示例代码如下:
libsome.a: foo.o bar.o lose.o wino
#只有更新过的目标文件才会重新打包
arr r libsome.a $?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值