社区
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
...全文
140
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
打赏
举报
回复
有什么问题么?
把整个文件贴出来。。。
精通
makefile
12年嵌入式开发,一直在一线做产品研发, 深深明白,看懂编译流程,掌握
代码
是如何编译非常重要 做一个芯片方案,从拿到资料和
代码
开始,第一件事就是编译
代码
,解决编译问题 另外,看懂
代码
也必须看懂编译过程,哪些参与编译,哪些在什么条件编译 其次,根据不同产品方案,一定要修改
代码
,不可避免要修改编译脚本深入讲解
Makefile
语法, 各种变量,规则,依赖,函数等,每个知识点都配有示例,让复杂的内容变的更清晰
如何编写一个
Makefile
文件(手把手的教你)
目录一、概念理解1、什么是
Makefile
?2、为何使用
Makefile
?二、实战
代码
演示与讲解1 没有
makefile
的项目是怎么创建运行的1.1 创建文件1.2 查看创建的文件1.3 给创建的文件放一点内容1.4 编译运行2、有
makefile
的项目如何创建运行2.1 删掉自动生成的a.out文件2.2 创建
makefile
2.3 执行
makefile
文件2.4 查看目录并运行可执行文件三、
代码
优化3.1 添加clean信息3.2 简化
makefile
信息3.2.1 简化第一版3.2.2 简化第二版3.
Makefile
经典教程(掌握这些足够)
makefile
很重要 什么是
makefile
?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,
makefile
还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写make
Makefile
教程(绝对经典,所有问题看这一篇足够了)
该篇文章为转载,是对原作者系列文章的总汇加上标注。支持原创,请移步陈浩大神博客:http://blog.csdn.net/haoel/article/details/2886
makefile
很重要 什么是
makefile
?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefil...
Makefile
makefile
* 可以看懂
makefile
文件就可以了 src 源文件 .c .h
Makefile
: 一段
代码
,执行这个
代码
能够自动生成一个库 命名
makefile
/
Makefile
makefile
规则: 一个文件可有一个或多个规则 目标…: 依赖… 命令 …
makefile
中的变量 预定义变量 ar:归档,打包 cc: c compiler cxx:c++ compiler g++ $@ 目标的完整名称 $< 第一个依赖文件的名称 $^ 所有依赖文件 $(变量名) 获取变量的值 模式匹配
Linux/Unix社区
23,121
社区成员
74,508
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章