Makefile学习笔记-第一个Makefile文件

学习笔记,难免疏漏,不喜勿喷,欢迎指正

0. 为什么是Makefile?

主动搜索而来的,可以不读这一大段!

我是在一本叫做《30天编写操作系统》的那本书上听说过makefile的,后来发现书里的很多东西我编译失败,遂放弃这本书。以后有时间还得重新捡起来读一下。

近期在学习c语言描述的数据结构与算法的时候,特别的想写多文件(一个文件的内容太多的话,看着头疼),然后编译的时候就出现了gcc a.c b.c d.c...的命令,头疼!随意makefile就回来了!那么makefile是干什么的也就显而易见了,多文件编译!

根据我之前学习的makefile的经历,岂不是说:每多一个源文件,就得改写下makefile?想想都头疼!不过感觉自己是多虑了!毕竟这么多年了,还是大家都说好的软件,这些问题肯定是不存在的。如果存在只能说明:技术还不到家!如果确实是技术到家了,那么为开源世界做贡献的时刻就到了!哈哈哈哈哈哈哈哈...

1. 我的环境

我的操作系统是windows,所以环境必须得自己折腾下(头疼中...),Linux没搞过,估计有现成的。

1. 操作系统: windows 10

这个就不用多说了吧!

所以如果是linux系统的话,我也不知道好不好使

2. C语言编译器-mingw64

可不喜欢安装这个了!感觉特别的麻烦!我找到的是在线安装器,特别不方便。有时间出一个教程,这里给个sourceforge上的下载器安装地址。

sourceforge下载地址:MinGW-w64 - for 32 and 64 bit Windows download | SourceForge.net

当然,也建议去光网逛逛:https://mingw-w64.org/

3. make

make是GNU下的项目,官网上没找到下载连接。搜索make for windows才找到的

make:就是GNU的make,网址:Make - GNU Project - Free Software Foundation 

make for windows网址:Make for Windows (sourceforge.net)

4. 脚本工具

系统自带的powershell,因为这货可以再任意文件里快速调出

2. 第一个makefile

先来一个makefile,然后再琢磨琢磨makefile到底是个啥!(我就这习惯)

2.1 需要一个c源文件

我们需要也给正常的C文件,这里就用大名鼎鼎的helloworld了!

/*
*  第一个makefile的程序源码:helloworld.c
*/
#include <stdio.h>

int main(void)
{
    printf("Hello world\n");

    return 0;
}

这里就保存文件为helloworld.c了。

接下来编译运行下看看:

程序正常!

2.2 makefile出场:

新建一个文本文档,文件名改为makefile ,然后再里面码上这些东西(先不用管为什么):

(万恶的插入代码里,没有makefile模板)

注意:gcc前面的点一下tab出来的!不是空格,不是空格,不是空格!

Hello: hello.c
    gcc hello.c

保存后,运行下看看效果:

首先清除一下所有的之前产生的文件(看官们可以再图形界面里操作,也可以用del指令一个一个来!下图中,我先ls一下,证明我的文件夹里只有两个文件hello.c和刚才写好的makefile (这个用type把内容打出来):

2.3 解释下这个makefile

make编译与gcc直接编译:

写好makefile后,再次编译的时候,直接输入make就可以了!make会自动寻找当前文件夹下的makefile文件(老板的make要求makefile里的m大写),然后根据里面的规则去编译程序。这里的规则是啥呢?

第一行:Hello: hello.c

make找到makefile文件后,做的第一件事情,自然是读入第一行!第一行又被冒号分成了两个部分。

其中冒号前面的,可以暂时理解为我们给接下来的一堆指令(虽然这里只有一条)起的名字

冒号后面的,则是告诉下面这群指令可以使用的源文件。

第二行: gcc hello.c

这句话就是刚才说的一堆的命令了(只是这里只有一句话)。既然是一堆指令,那么也自然可以给他加上很多其他指令,比如windows下可以试试dir指令

确实可以运行:

这里再次强调一下:指令前面必须有tab!否则编译会出错!

两个tab行吗?我测试的这个简单的makefile可以,以后学习更多的内容后就不晓得了

3. 多起几个名字

刚才说到,makefile里的第一行是给这一堆指令起名字,那么可不可以多起几个名字呢?

还有,这个名字可不可以不接任何的文件呢?

这里写一个makefile文件,供大家课外研究使用

3.1 makefile文件:

Hello: hello.c
    gcc hello.c

DIR:
    dir

上述文件中有连个名字,一个是Hello,一个是DIR,保存后,我们再次运行下make:

(清理多余文件,展示我的Makefile,运行make,执行程序)

看起来好像第二个DIR没啥用。其实只是这里没用。

这里我们可以显性的去执行下DIR这个名字后面的指令:

啥啥都有,啥啥都不缺!

而且,冒号后面是可以啥啥都没有的!

我们可以利用这一特性去一次性删除哪些不需要的文件,比如这样的makefile:

Hello: hello.c
    gcc hello.c

clean:
    del a.exe

这样,每次执行make clean就可以直接把a.exe给删除了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值