换个角度说makefile

本文从一个新的视角介绍makefile,它是一个规则文件,用于自动化C/C++项目的编译和链接过程。通过实例展示了如何创建和使用makefile,包括设置编译器选项、链接库、清除目标文件。虽然简单的项目可用一条命令解决,但面对复杂工程,makefile的规则和自动化能力显得尤为重要。
摘要由CSDN通过智能技术生成

 

作为Linux下的C/C++开发者,没接触过makefile一定说不过去,通常构建大型的C/C++项目都离不开makefile,也许你使用的是cmake或者其他类似的工具,但它们的本质都是类似的。

作为一个轻度使用者,应读者要求,斗胆介绍一下makefile,不过与普通的makfile教程不同的是,本文准备从另外一个角度来介绍。如有不妥之处,欢迎指出。

makefie到底是什么

在Linux下,对于下面这个简单的程序

//来源:公众号【编程珠玑】
//main.c
#include <stdio.h>
#include <math.h>
int main()
{
    int a = 10;
    int b = 4;
    int c = pow(a,b);
    printf("10^4 = %d",c);
    return 0;
}

我们通常使用gcc就可以编译得到想要的程序了:

$ gcc -o main main.c -lm

(如果不理解为什么要加-lm,请参考《一个奇怪的链接问题》)。

对于单个文件的简单程序,一条命令就可以直接搞定了(编译+连接),但是如果是一个复杂的工程,可能有成千上万个文件,然后需要链接大量的动态或静态库。试想一下,你还想一条一条命令执行吗?懒惰的基因是刻在程序员骨子里的。

因此你可能会想,那我写个脚本好了。嗯,听起来好多了。

文件多就多,你告诉我要编译哪里的文件,我遍历一下就好了,你再告诉我要链接哪些库,我一一帮你链接上就好了。

然而到这里又会想,既然编译链接都是这么类似的过程,能不能给它们写一些通用的规则,搞得这么复杂干嘛?然后按照规则去执行就好了。

而makefile就是这样的一个规则文件,make是规则的解释执行者。可以类比shell脚本和bash解释程序的关系。

所以,makefile并不仅仅用于编译链接,只不过它非常适合用于编译链接。

makefile什么样?

它最重要的规则语法如下:

<target> : <prerequisites> 
[tab]  <commands>

咋一看,就这么个玩意?但是什么意思?

  • target 要生成的目标文件名称

  • 要依赖的文件
  • [tab] 对,就是tab键,初学者很容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值