linux下的Makefile文件的简单写法和简单使用

          这是第一篇我写的博客,以后会不定时的写一些技术向的东西进来,linux的,c的还有别的东西吧。一来可以让自己复习巩固,加深印象啥的;二来要是有人看也是极好的。另外这些东西都是自己写的,复制来复制去没啥意思
         那么,今天做的是一个linux下的Makefile文件。
         先假设一个情景,公司的某一个工程,嗯,有很多的文件,比如有几千个吧,什么源文件啊头文件啊...毕竟做一个东西实验很多功能,这些东西还是很多的。公司用的是linux(linux开源不要钱啊,公司买windows要钱吧,买vs要钱吧,买offes要钱吧,那老板为啥会想用花钱的呢)然后你收到了这些东西,然后在linux下编译链接啥的就必须用到gcc。然后你就敲
gcc -c xxx.c(拿.c举例子吧,后面也是)然后就出现了一堆.o,然后你又敲 gcc -o xxxxxxx xxx.o。然后你完成了,这几千个你说你得写多久中间自己还不能出错。当你一个问题都没错,以为工作完成的时候,一个人给你说,某个文件代码出现了错误要改,你会不会想弄死这个人,然后为了工资又花这么久敲了一遍。实际上,只要你开始测试一些数字,哪怕你改一个小小的地方,就得重新gcc这么多东西。不要说上箭头的事情,你以为工作结束电脑一关就gg了。
        这个时候,就需要用到Makefile文件了,简单来说,这个文件可以帮你完成gcc这些东西的工作,并且你改了东西之后,然可以继续使用(嗯.....很多人,不不不不,很多程序员都不知道这个文件)
       还是举例子来说这个东西吧,用简单的加减乘除来说吧,加减乘除每一个都是用自己的函数,模拟很多人写出的文件。
       有这么几个文件,my_math.h ,add.c ,sub.c,mux.c,div.c ,main.c。my_math.h里是my_add,my_sub,my_mux,my_div的声明。add.c ,sub.c,mux.c,div.c里就是加减乘除的实现啦。main.c中输入值来进行测试。

       现在就开始写Makefile文件吧。
        第一步:创建一个名叫Makefile的文件    vim Makefile     嗯,vi或者vim都行啦,看习惯哪个了,另外这个文件只能叫Makefile或者makefile,别的都不行。
        第二步:写Makefile文件,下面这些就是内容了,写完内容我在解释呐。
main:main.o add.o sub.o mux.o div.o
         gcc-o main main.o add.o sub.o mux.o div.o
main.o:main.c 
        gcc -c main.c
add.o:add.c 
        gcc -c add.c
sub.o:sub.c 
        gcc -c sub.c
mux.o:mux.c 
        gcc -c mux.c
div.o:div.c 
        gcc -c div.c
 嗯,这些蓝的就是最简单的内容啦,现在解释一下:
main:main.o add.o sub.o mux.o div.o     这一句main是最后形成的可执行文件的名字,冒号后面这些".o"文件就是main是由那些文件组成的。
         gcc-o main main.o add.o sub.o mux.o div.o    这句就是命令啦,注意:命令开头是一个/tab,一定要有
main.o:main.c  中间步骤,形成".o"文件。
       gcc -c main.c  也是命令之气那也是要/tab的。
后面的也是这样就不说了。
        第三步:进入末行模式,保存退出。
        第四步:当你写的makefile文件没任何问题的情况下输入命令 make  然后你就可以看见自动执行命令最后在当前文件夹中形成一个可执行文件,这里是main。
        补充:因为中间会形成很多的“.o”文件,可以在makefile文件中加入这个来删除“.o”文件。
clean:
       rm *.o
       执行完之后,用  make clean  就可以删除所有的“.o”文件了。
       现在来简单总结一波写法,先写出最后可执行文件的名字,然后下一行/tab写出形成“.o”文件的过程,因为此时没有“.o”文件,所以再写出每一个“.o”文件和它的由来,再写出形成过程,这样简单的就写好啦。
       最后一个问题是一个关于效率的问题,毕竟效率应该是最高的追求,当更改main.c中的数值的时候,使用make只是执行了main.c 到main.c和main的形成过程,并没有重新执行add啊sub啊之类的,同理,更改add只会重新执行和add有关的步骤,其他的也一样。当你什么都不改,在尝试make一次的时候,就会报错,因为什么都没改,make当然就不会在执行一遍喽。这个文件是根据什么来确定什么东西改了的,需要重新执行呢,也是很简单,当你执行ll时你会看到一个时间,这就是依旧,这个时间是最后修改时间,根据s这个时间的先后顺序确定什么改了,简单举例吧,main是最后形成的,所以只要修改时间比main还晚,那就一定是修改了,所以需要执行命令。
         所以今天的makefile文件的写法还有使用就写到这里吧,要是有什么错别字啥的能看明白就好了。毕竟一个一个字敲是有可能会错的啊啊啊啊。最后一句,makefile文件很实用,很强大。另外这是最简单的,之后再补充一些别的
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值