linux之makefile编写2

在上一篇博文《linux之makefile编写、Linux模块化编程1(最简单的方法)》
中我们介绍了makefile最基础的应用。今天我们来看一下稍微深层次一点的makefile文件的编写!话不多说直接上例子
在当前目录下面我有三个.c文件分别是qq.c qq1.c qq2.c这三个是独立的文件,每个文件都可以编译成一个可执行文件。也就是说这个三个文件包含3个主函数(三个main函数)。这样我们要如何来进行makefile文件的编写呢?
在这里插入图片描述
首先我们还是先建立一个makefile文件执行指令touch makefile。上图我已经建立过了,这里就不重复了!
然后执行vim makefile打开makefile文件。并写一下指令!如图:
在这里插入图片描述

all: qq1 qq2 qq

qq1: qq1.c
	gcc qq1.c -lpthread  -o qq1

qq2: qq2.c
	gcc qq2.c -lpthread -o qq2

qq: qq.c
	gcc qq.c -lpthread -o qq

clean: 
	rm qq1 qq2 qq

我们来解释一下指令。all: qq1 qq2 qq这一句指令的作用就是让makefile在编译一个主函数main函数后不会停止,依然依序继续下去。要注意all必须放在最上面,后面更的内容是文件编译后的文件。像qq则是qq.c编译后的文件.

qq: qq.c
	gcc qq.c -lpthread -o qq

我们看一些这一句代码,实际上这一句格式在这篇文章《linux之makefile编写、Linux模块化编程1(最简单的方法)》中我已经做过解释了,这里回顾一下我们再说一下。A: B也就是将B编译成文件A,前面写要编译成的文件的名称,然后:在接一个空格
后面是你要编译的文件。第二句记得tap键,然后写你需要执行的指令。gcc qq.c -lpthread -o qq解释一下-lpthread加这个参数原因是qq.c这个.c文件里面的代码含有线程部分,所以要加这个,-o是给编译后的文件命名的参数,如果没有这个参数,编译后就是a.out文件,显而不方便查找。
其他两句都是同理。clean在上一章已经讲过了这里就不在解释了。
我们来运行一下看看。
在这里插入图片描述
其中有一段警告是程序的问题不影响的。看一下编译后生成的文件qq qq1 qq2都是存在的,说明编译没有问题。上运行结果证实一下吧!
在这里插入图片描述
程序运行没有问题,说明makefile写的没有错!
看一下这个makefile文件里面有好多重复的东西,有没有声名简单的方法呢?当然有啊!
就拿上面那个例子吧,

lsp = gcc
all: qq1 qq2 qq

qq1: qq1.c
	$(lsp) qq1.c -lpthread  -o qq1

qq2: qq2.c
	$(lsp)  qq2.c -lpthread -o qq2

qq: qq.c
	$(lsp)  qq.c -lpthread -o qq

clean: 
	rm qq1 qq2 qq

这就相当于宏定义将gcc进行定义,这样如果需要更改别的编译器不就方便太多了吗,调用的时候只需要$(定义的参数)就好,像别的库的链接,一些指令等都是可以使用相同的办法的。在实际编程中也建议这种方法,大大减小了错误的可能。
好了这一章的makefile就先到这里了。makefile系列的第二篇完结,因为我想让基础比较薄弱的人们看的更加简单点所以稍显啰嗦。makefile还有最后一个系列《Linux之makeflie编写3》就讲完了,难点也都放在哪里面了,近期更新。
欢迎指正交流,感谢大家!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值