Makefile 概述 程序的编译和链接 介绍 如何工作的 自动推导

概述

      工程中的源文件很多,一般都是按类型、功能、模块分别放在各个目录中

      makefile 定义了一系列的规则来指定,哪些文件先编译,哪些文件后编译,哪些文件重新编译,还有些进行更复杂的功能操作
      makefile 好处:“自动化编译”,只需要 make 命令,整个工程完全自动编译,提高了开发的效率

      make :解释 makefile 中指令的命令工具

      遵循于 IEEE 1003.2-1992 标准的(POSIX.2)

程序的编译和链接

    编译(compile):把源文件编译成中间代码文件(Object File)(O 文件或 OBJ 文件)

    链接(link):大量的 Object File 合成 执行文件
    可把中间目标文件打个包( Archive File): .a 文件

Makefile 介绍

  规则:

      工程没有编译过,那所有 C 文件都要编译并被链接
     工程的某些 C 文件被修改,那只编译被修改的 C 文件,并链接目标程序

     工程的头文件改变,那就需要编译引用这些头文件的 C 文件,并链接目标程序

# target:目标文件、 Object File、执行文件、标签(Label
# prerequisites:生成 target 需要的文件、目标
# command:make 需要执行的命令
# prerequisites中有一个以上的文件比 target 文件更新,command 就会被执行
target ... : prerequisites ...
command
# make : 成执行文件 text
# make clean : 删除执行文件和所有的中间目标文件
# 目标文件(target):执行文件(text) , 中间目标文件(*.o)
# 依赖文件(prerequisites):' : '后面的 .c 文件和 .h 文件
# 一定要以一个 Tab 键作为开头
text : mian.o command.o files.o
    cc -o text mian.o command.o files.o

main.o : main.c command.h files.h
    cc -c main.c

command.o : command.c command.h
    cc -c command.c

files.o : files.c files.h
    cc -c files.c

# 冒号后什么没有,那么 make 就不会自动去找文件的依赖性
clean :
    rm text mian.o command.o files.o

make 是如何工作的

       make 会在当前目录下找名字叫“Makefile”或“makefile”的文件

      找到,它会找文件中的第一个目标文件(target), 例子中,他会找到“ text ”这个文件,并把这个文件作为最终的目标文件

      text 文件不存在 或 text 所依赖的后面的 .o 文件的文件更新了,就会执行后面所定义的命令来生成 text文件

      text 依赖的.o 文件存在,那 make 会在当前文件中找目标为.o 文件的依赖性,找到则规则生成.o 文件

     C 文件和 H 文件是存在, make 会生成 .o 文件, 然后再用 .o 文件 make ,也就是执行文件 text
 

     整个 make 的依赖性,make 会一层又一层地去找文件的依赖关系,最终编译出第一个目标文件
     如果出现错误,make 会直接退出,并报错

makefile 中使用变量

  为了 makefile 的易维护,在 makefile 中可以使用变量

# 定义一个变量
OBJECTS = mian.o command.o files.o

text : $(OBJECTS)
    cc -o text $(OBJECTS)

main.o : main.c command.h files.h
    cc -c main.c

command.o : command.c command.h
    cc -c command.c

files.o : files.c files.h
    cc -c files.c

# 冒号后什么没有,那么 make 就不会自动去找文件的依赖性
clean :
    rm text $(OBJECTS)

 make 自动推导

       make 会自动推导文件以及文件依赖关系后面的命令

      只要 make 看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中
 

# make 的“ 隐晦规则 ”
OBJECTS = mian.o command.o files.o

text : $(OBJECTS)
main.o : command.h files.h
command.o : command.h
files.o : files.h

# ' .PHONY '表示,clean: 伪目标文件
# clean 放在文件的最后
# -rm :某些文件出现问题不用管,继续执行
.PHONY : clean
clean :
    -rm text $(OBJECTS)

 

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 17:10
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 18:05
哈哈哈哈哈感觉朋友找工作的已经疯掉了,直接上图
码农索隆:真老板娘:“我嘞个去,这不我当年的套路吗
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务