Makefile 学习之简单的文件编译处理

Makefile 学习
在写Makefile时可能会出现{“遗漏分隔符”}的错误,则需要看一下在换行时是否加  tab 。在定义好依赖关系后,后续的那一行定义了如何生成目标文件的操作系统命令,一定要以一个Tab键作为开头。

例:银行出纳(显式规则)
cal : admit.o main1.o main.o user.o /           // target ... :        prerequisites ...

withdraw.o
value = admit.o main1.o main.o user.o withdraw.o
cc=g++
edit :
$(cc) -o edit $(value)   //换行需要按tab     // "command"

.PHONY : edit

main.o :  main.cpp main.h
$(cc) -c  main.cpp
main1.0 : main1.cpp main.h
$(cc) -c  main1.cpp
user.o :  user.cpp user.h
$(cc) -c  user.cpp
withdraw.o : withdraw.cpp withdraw.h
$(cc) -c  withdraw.cpp
admit.o : admit.cpp admit.h
$(cc) -c  admit.cpp

clean :
rm $(value)



还可以这样使用Makefile(隐晦规则)


objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
main.o : defs.h
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h
.PHONY : clean
clean :
rm edit $(objects)

成功编译的:
value = admit.o main1.o main.o user.o withdraw.o
cc=g++
edit : $(value); $(cc) -o edit $(value) \
-I/local/include/SDL -lSDL -lSDL_image -lSDL_ttf

main.o :  main.h
main1.0 : main.h
user.o :  user.h
withdraw.o :  withdraw.h
admit.o : admit.h

clean :
rm edit $(value)

其自己会自动寻找依赖关系,make可以自动推导命令。

3。makefile中引用其他的makefile使用include<filename>,在include的前面可以有一些空字符,但绝不能用 tab 开始;其他用法与c语言中的include的差不多。

4.-include <filename>
其表示,无论include过程中出现什么错误,都不要报错继续执行。和其它版本make兼 容的相关命令是sinclude,其作用和这一个是一样的。

5.而命令中的“$<”和“$@”则是自动化变量,“$<”表示所有的依赖目标集(也就是“foo.c bar.c”),“$@”表示目标集(也就是“foo.o bar.o”)。

6.$(filter %.o,$(files))表示调用Makefile的filter函数,过滤“$filter”集,只要其中模式为“%.o”的内容。


7. make  参数中文翻译
 
- b,    - m     忽视了兼容性。
- b    ,——        总是无条件地使所有目标。
- c    目录,    目录——目录=    做任何事之前更改目录。
- d    打印大量的调试信息。
——调试[=旗帜]印刷各种类型的调试信息。
- e     -环境    覆盖    环境变量覆盖makefile。
- f    文件——文件    =文件——makefile =文件
读文件作为一个makefile。
- h    ,——帮助打印此消息并退出。
-I,——忽略错误忽略错误的命令。
-I     的目录,——包括dir =目录
搜索目录包括makefile。
- j[N],——工作[= N]允许N工作;无限的工作而且没有一次参数。
- k,——继续继续当一些目标不能使。
- l[N],——平均负载(= N),——马克斯负载[= N]
不要启动多个工作除非负荷低于N。
- l,——检查符号时代使用最新的mtime符号链接和目标之间。
- n,——只是打印,——,——侦察管制
不实际运行任何命令;只是打印它们。
- o文件——旧文件=文件——假设老=文件
考虑文件很旧,不改造它。
- p,——打印数据基地使内部数据库打印。
- q,,问题没有命令的退出状态运行,说如果到日期。
- r,——没有内置规则禁用内置的隐性规则。
- r,——没有内置变量禁用内置的变量设置。
- - - -沉默,不似命令——安静。
- s,——没有继续,——停止
关闭- k。
- t -触摸    触摸目标而不是改造他们。
- v,——版本打印版本号的制造和出口。
- w -打印    目录打印当前di

8.$(foreach <var>,<list>,<text>)             注意,foreach中的<var>参数是一个临时的局部变量,foreach函数执行完后,参数<var>的变量将不在作用,其作用域只在foreach函数当中。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值