makefile制作和逐步推进过程
来源:互联网 发布:ug8.5数控编程视频教程 编辑:程序博客网 时间:2024/05/16 01:54
makefile制作和逐步推进过程(一起学习吧)
优点 1开发效率 2编译速度
基本格式
target ... : prerequisites ... command ... ...
- target 目标文件, 可以是 Object File, 也可以是可执行文件,$@
- 生成target所需要的文件或者目标依赖项,
< ^ - make需要执行的命令 (任意的shell命令), Makefile中的命令必须以 [tab] 开头
- 隐晦规则,变量定义,文件指示 :: Makefile中引用其他Makefile 注释
通配符
- * :: 表示任意一个或多个字符
- ? :: 表示任意一个字符
- […] :: [abcd] 表示a,b,c,d中任意一个字符, [^abcd]表示除a,b,c,d以外的字符, [0-9]表示 0~9中任意一个数字
- ~ :: 表示用户的home目录
推演例子
#文件名需:makefile all: a.out #首先依赖a.out: main.o hello.o gcc main.o hello.ohello.o: hello.c gcc -c hello.cmain.o: main.c gcc -c main.c
变量使用
- allobj := main.o hello.o (:=和=的区别 :=是立即赋值 =要用时展开类define)
- 内置特殊变量:
- $@表示目标文件
- $<表示第一个依赖文件
- $*
- $%
- $^表示所有的依赖文件,
- $?
- $+
allobj := main.o hello.oall: a.outa.out: $(allobj) gcc $^ hello.o: hello.c gcc -c hello.cmain.o: main.c gcc -c main.c
缺省规则
xxx.o自动依赖xxx.c 没有依赖.h不好使用
allobj := main.o hello.oall: a.outa.out: $(allobj) gcc $^
makefile执行shell命令
target := hello.outallobjc := $(shell ls *.c) #赋值所有.c文件allobj := $(allobjc:.c=.o) #把.c文件修改.o文件all: $(target)$(target): $(allobj) gcc -o $@ $^
头文件的依赖
gcc -MM 自动寻找.o文件依赖所有.h文件 gcc -MM a.c >a.d 文件内容 a.o:a.c xx.h xxx.h
target := hello.outallobjc := $(shell ls *.c)allobj := $(allobjc:.c=.o)alldep := $(allobjc:.c=.d)CC := gccall: $(target) #注意放的位置# %为通配符%.d: %.c $(CC) -MM $< > $@-include $(alldep)# include main.d 文件内容# main.o: main.c hello.h# makefile会合并上下两句为 mian.o: main.c hello.h# mian.o: main.c%.o: %.c $(CC) -c $<$(target): $(allobj) $(CC) -o $@ $^
使用make clean
一般放在文件最后
.POHONY clean: -rm *.o *.d $(target)
方便使用的方法
makefile包含makefile
作用可把经常变动的变量个一个文件里,方便管理
-include define.mk #include相当于define拷贝过来,-当include的文件不存在忽略
测试makefile变量和命令
#测试输出变量test: echo $(allobj)#命令本身会输出 可以加@不输出 echo 会输出两次所以加@%.o: %.c @echo "%.o:%.c" $(CC) -c $<
其他
- 获取目录下的.c 和转换成.o的其他方法
comm_path = ./comsrc := $(wildcard $(comm_path)/*.c)obj := $(patsubst $(comm_path)/%.c,$(comm_path)/%.o,$(src))
- 多个目标 \分隔
target := a.out \ b.out
- 以后补
clearn: -rm ... ...distclean: -rm ... ....PHONY:clean ALL distclean
0 0
- makefile制作和逐步推进过程
- SOA应用应逐步推进
- gcc和makefile制作
- 【Linux技术】autotools制作makefile过程详解
- 项目推进过程中的乏味
- 用autotools制作Makefile 和configure文件。
- 使用autotools制作Makefile和configure文件
- 用autotools制作Makefile 和configure文件。
- 用autotools制作Makefile 和configure文件
- 用autotools制作Makefile 和configure文件
- Makefile文件基本制作和编译选项
- makefile制作
- 制作Makefile
- 程序编译过程和Makefile的作用
- 通用的makefile,制作动态库和静态库
- 库的制作和项目管理工具makefile\qmake\cmake
- 过程改进漫漫谈之过程体系推进策略
- 网页表单制作和验证过程
- java多线程爬虫
- bzoj2693 jzptab
- HDU1233(最朴素的prim)
- 数值积分
- 十分钟搞定pandas
- makefile制作和逐步推进过程
- 自定义View入门必看
- 3月25日 4C(华中赛区,郑轻)参赛感想
- bzoj 2004 【hnoi2010】公交线路
- CPP_Basic_Code_P2.1-PP2.7.7
- Eclipse下Java Resources报红叉问题
- log4cplus应用之日志文件输出(三)
- 第六届蓝桥杯加法变乘法
- 一、swift3.0简介