A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 道南路 初级黑马   /  2017-11-6 14:06  /  2010 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

#目标:依赖
#    规则(记得规则前面要加一个table)

#自动变量
# $@:规则中的目标
# $<:规则中的第一个依赖
# $^:规则中的所有依赖
# 只能在规则的命令中使用

#makefile第一个版本,
#app:head.h main.c add.c sub.c mul.c div.c
#    gcc head.h main.c add.c sub.c mul.c div.c -o app
#缺点:这样的效率太低,需要编译其中某一个文件时,会全部编译,需要改进

#makefile第二个版本,检测目标时间是否是大于依赖时间,不大于就重新生成依赖,
#app:head.h main.o add.o sub.o mul.o div.o
#    gcc head.h main.o add.o sub.o mul.o div.o -o app

#生成.o文件,规则里面是可以加绝对目录的,如果想生成到特定的目录里面,可加相关的路径
#main.o:main.c
#    gcc main.c -c

#add.o:add.c
#    gcc add.c -c

#sub.o:sub.c
#    gcc sub.c -c

#mul.o:mul.c
#    gcc mul.c -c

#div.o:div.c
#    gcc div.c -c
#
#makefile第二个版本缺点:冗余太多



#makefile第三个版本
#用变量来替代重复使用的依赖
自动变量
# $@:规则中的目标
# $<:规则中的第一个依赖
# $^:规则中的所有依赖
# 只能在规则的命令中使用
#obj=head.h main.o add.o sub.o mul.o div.o

#app:$(obj)
#    gcc $(obj) -o app

#%.o:%.c
#    gcc -c $< -o $@
#模式匹配
#makefile第三个版本,缺点可移植性差



#makefile第四个版本,可移植性高
#查找指定目录指定类型的文件:wildcard,使用相应的函数

#src=$(wildcard ./*.c) 当前目录,所有.c的文件
#匹配替换
#obj=$(patsubst %.c,%.o,$(src))  将里面所有.c的文件替换为.o的文件,.c文件是从src里面获取

src=$(wildcard ./*.h *.c)
obj=$(patsubst %.c,%.o,$(src))
target=app
$(target):$(obj)
    gcc $^ -o $@

%.o:%.c
    gcc -c $< -o $@

#makefile第四个版本,可移植性高,但是不能清理项目


#makefile第五个版本,再增加一个清理项目的规则
#clean:
#    rm *.o app

#没有依赖,只有目标,这样就可以通过make hello直接执行目标 ,测试用
#hello:  
#   echo "hello kevin"

#可选择性的执行目标,使用make clean执行下面的规则,没有依赖,只有目标和规则
#clean:
#    rm *.o app
#可以在规则最前面加减号 - :意思是规则执行失败后,继续执行后面的命令
#声明伪目标:不做更新和检查 :.PHONY:clean,即使目录文件有文件和命令是同名的也可以执行目标命令
.PHONY:clean
clean:
    -rm $(obj) $(target)



评分

参与人数 1黑马币 +2 收起 理由
播妞 + 2 很给力!

查看全部评分

3 个回复

倒序浏览
宝宝好棒
回复 使用道具 举报
々沉默〃 来自手机 初级黑马 2017-11-6 18:26:32
藤椅
66666666666666
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马