makefile学习笔记-Makefile介绍(一个示例)

20180411 makefile学习笔记-Makefile介绍(一个示例)




make命令执行时,需要一个makefile文件,以告诉make命令需要怎样的去编译和链接程序;
eg:工程中有8个C文件和3个头文件,我们要编写一个Makefile来告诉make命令如何编译和链接这几个文件,我们的规则是:
(1)若这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
(2)若这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
(3)若这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。


只要我们的Makefile写的够好,所有的这一切,我们只用一个make命令就可以完成。


我们为了完成前面所述的那三个规则,我们的Makefile应该是下面这样的:


edit:main.o kbd.o command.o display.o \
insert.o search.o file.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o file.o utils.o


main.o:main.c defs.h
cc -c main.c
kbd.o:kbd.c defs.h command.h
cc -c kbd.c
command.o:command.c defs.h command.h
cc -c command.c
display.o:display.c defs.h buffer.h
cc -c display.c
insert.o:insert.c defs.h buffer.h
cc -c insert.c
search.o:search.c defs.h buffer.h
cc -c search.c
files.o:files.c defs.h buffer.h command.h
cc -c files.c
utils.o:utils.c defs.h
cc -c utils.c
clean:
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o




反斜杠(\)是换行符的意思。这样写便于Makefile的阅读。
我们可以把这个内容保存在文件为“Makefile”或“makefile”的文件中,然后在该目录下直接输入命令“make”就可以生成执行文件edit,如果要删除执行文件和所有的中间目标文件,那么只要简单地执行一下“make clean”就可以了。




在这个makefile中,目标文件(target)包含:执行文件edit和中间目标文件(*.o),依赖文件(prerequisites)就是冒号后面的那些.c文件和.h文件。每一个.o文件都有一组依赖文件,而这些.o文件又是执行文件edit的依赖文件。依赖关系的实质上就是说明了目标文件是由哪些文件生成的,换言之,目标文件是哪些文件更新的。






在定义好依赖关系后,后续的那一行定义了如何生成目标文件的操作系统命令,一定要以一个Tab键作为开头,记住,make并不管命令是怎样工作的,他只管执行所定义的命令。make会比较targets文件和prerequisites文件的修改日期,若prerequisites文件的日期比targets文件的日期更新,或targets不存在的话,那么,make就会执行后续定义的命令。










这里要说明的一点是,clean不是一个文件,它只不过是一个动作名称,有点像C语言的label一样,其冒号后说明也没有,那么,make就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。要执行其后的命令,就要在make命令后明显的指出这个label的名字,这样的方法非常有用,完美可以在一个makefile中定义不用的编译或是和编译无关的命令,比如程序的打包,程序的备份,等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值