社区
Linux/Unix社区
帖子详情
谁能看懂下面这段Makefile代码我就服
jscsqb
2008-05-02 05:47:26
SRC = libsample.c
SRC.C = $(filter %.C, $(SRC))
.....
.....
$(SRC.C:%.C=%.c): #last line in this file
...全文
138
8
打赏
收藏
谁能看懂下面这段Makefile代码我就服
SRC =libsample.c SRC.C= $(filter %.C, $(SRC)) ..... ..... $(SRC.C:%.C=%.c): #last line in this file
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
felish
2008-05-08
打赏
举报
回复
有点难度!
但还是有大侠给解了!看样子应该好好学学了!
geldqb
2008-05-08
打赏
举报
回复
1。是空
可用如下脚本进行确认:
-----------------------------
SRC = libsample.c #libsample.C
SRC.C = $(filter %.C, $(SRC))
all:
@echo "print SRC.C = "$(SRC.C)
-----------------------------
2。是宏展开的语法(http://radiofly.to/nishi/programming/make-guide.html)
$(SRC.C:%.C=%.c):
是将SRC.C中的所有.C作为后缀的文件替换成.c文件,并以此作为一个没有依赖的目标
a.如果SRC = libsample.C
则经过宏展开之后,最后一行就变成
libsample.c:
根据make规则,没有依赖的目标总是最新的,那么在Makefile中的其他地方,
所有以libsample.c作为依赖的目标都需要被更新。
但是如果libsample.c不存在,那么根据Make的另一个规则,不存在的目标都是最旧的,
该目标需要被更新。那么这个不存在的libsample.c会被更新成最新的,
这样又得到所有以libsample.c作为依赖的目标都需要被更新这个结论。
b.如果SRC = libsample.c
则经过宏展开之后,最后一行就变成
:
无目标,无依赖,无规则,就是什么都不做。
欢迎拍砖。
jscsqb
2008-05-07
打赏
举报
回复
谢谢 bshawk和大家。
有以下几个问题:
1。SRC.C的值为多少?
如果SRC=libsample.c ,
那么SRC.C=(空)?还是SRC.C=libsample.c?
这里区分大小写吗?
2。最后一行 $(SRC.C:%.C=%.c): 是一个什么规则都没有的目标。
它到底能起到什么样的作用?
就是转换文件后缀(大写到小写)用的吗?
为什么一个什么规则都没有的目标可以起到转换后缀的作用?
谢谢。
air_snake
2008-05-07
打赏
举报
回复
1.个人认为是后者
2.你要看看Makefile的语法书了
bshawk
2008-05-02
打赏
举报
回复
我来回答下,各位排砖:)
SRC = libsample.c
# 得到原文件列表为 “libsample.c”
SRC.C = $(filter %.C, $(SRC)) # 将上面得到的原文件列表进行过滤,找出形如*.C的文件列表,保存到SRC.C中
.....
.....
$(SRC.C:%.C=%.c):
# 将SRC.C中的*.C文件转化成*.c输出(实际存在于文件系统中的的文件名并没有改变),并作为taget
dxing_1983
2008-05-02
打赏
举报
回复
知道答案了贴下,哈哈
dxing_1983
2008-05-02
打赏
举报
回复
好象绕一圈又回去了
yangb2014#
2008-05-02
打赏
举报
回复
有什么问题么?
把整个文件贴出来。。。
Linux/Unix社区
23,107
社区成员
74,506
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章