Linux--makefile文件

makefile --> Linux上的工程管理工具

工程中的源文件可以根据模块、功能等存储在不同的目录中

makefile定义了一系列的规则来指定哪些文件需要先编译哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile如同一个shell脚本一般,其中也可以执行操作系统的命令。

具体操作这里仅以简单代码进行示例:
以下三个文件,math.h math.c main.c
math.h如下:在这里插入图片描述
三个相加函数
实现math.c如下
在这里插入图片描述
测试如下:
在这里插入图片描述
我们可以通过gcc -o main main.c math.c的方式进行编译,但是在具体问题或者说是项目中,源文件并不是示例中一般,仅仅两三个源文件可能几百个或者更多的源文件,如果都是用上述方式,编译一次,就要很麻烦,此时makefile的强大就要体现出来了,首先要创建一个普通文件名为makefile的文件,然后先上代码在这里插入图片描述
这个文件的代码编写方式是逆序的,就是需要生成main执行文件,先要有main.o和math.o两个文件,然后这两个文件通过gcc -o main main.o math.o方式生成main文件
但是现在没有main.o和math.o两个文件,就是main.o由main.c通过gcc -c main.c获得,同理math.o由math.c通过gcc -c math.c获得
然后clean是一个伪目标,并不会主动执行,指定执行才会触发,作用就是删除main和删除所有.o文件
最终执行只需输入make就可完成一系列操作。
可能有人会觉得这样貌似更麻烦,本来就是gcc编译一步就可以完成,但是现在多了个文件,还得新写文件,把文件全都写进去,其实不是这样,当一个工程开始创建的时候,我们就可以开始编写makefile文件,写好一个文件就把他写makefile文件中,当新写了文件只需要一个一个加入到makefile文件中即可,例如如果在此工程中我再加入list.c一个文件,只需要在上述makefile文件中第一行加入list.o文件,下边加入list.o的依赖项,就可以,也就是说,makefile文件时从工程创建开始就开始编写,工程每新添一个文件,我就添加进makefile文件中,这样在工程文件多起来的同时,我们的makefile文件也变得大了起来,等最后完成后,只需要输入make命令,就可以编译整个工程文件代码。
并且在makefile每次编译时候,只会重新编译修改过的或者新添加的文件,也就是说上一次之前编译过的文件不会重新编译,因此也提高了编译效率。
顺便一提,如果要makefile生成debug版本,要在gcc -c项中后边加入-g项
强调,文件名必须是make,若是文件名不是makefile
make -f 文件名(不过不实用)
如果路径不同,就要把文件路径写入makefile文件中

可能有人会觉得,这样编写makefile文件还是有点麻烦,以上所说的是最原始的标准,接下来我们慢慢优化。在这里插入图片描述
(数字代表行)
1.file:makefile文件中可以设置变量,我们通过file变量可以理解为打包,把需要编译的文件打包在一个变量中,之后编译文件只需要操作此变量即可,后续要加入新的文件在只需变量中扩充;换行使用 “\ ”
2.VPATH :因为在操作时候,有些文件路径不一样,每个文件前都加入路径,过于麻烦,在前设置VPATH搜索的环境变量,在编译时会进行自动搜索,若是后续写代码时候加入了新的路径只需要添加进来即可
4.CC,不设置的话,会默认使用cc进行编译,CC的设置就是设置用什么编译器,包括如果想生成debug版本在这里设置CC=gcc -g即可,类似使用g++就设置CC=g++
5.在使用变量的时候需要加$符号以及括号
6.依赖项的生成也不需要一个一个去写,用变量直接描述即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值