Makefile学习笔记-文件跟新检测的实现

0. 概述

0.1 上次回顾

第一个学习笔记中,介绍了我的makefile测试环境之外,主要讨论了在编译c文件的情况下,记录了这么几个问题:

1. makefile的基本格式(好像也叫显示规则,目前还没有深究)

2. makefile里在写个clean规则(那里的写法好像不是很规范,回头学习到更多知识的时候再更新)

有兴趣的朋友可以参考一下:Makefile学习笔记-第一个Makefile文件_Brook博客栏-CSDN博客

0.2 本期预告

这一次主要针对其他的几个方面去讨论“

1. makefile规则的名字,其实很有用(检测文件的新旧)

本文的学习材料来自b站视频,欢迎前去围观:【c语言】11.如何编写Makefile文件_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

1. 规则的名字,其实很重要

首先还是和上次一模一样源c文件(文件名hello.c):

#include <stdio.h>
 
int main(void)
{
    printf("Hello world\n");
 
    return 0;
}

第一个makefile是这样写的:

Hello : hello.c
    gcc hello.c

在执行make后,执行了make后,如愿的出了一个a.exe的程序。再执行make的时候,程序会被再次执行一次。那问题来了,如果我真的有一个成百上千的工程,每次都全盘来一次的话,太慢了!再这个视频里,我找到了突破口!

首先,复习一下makefile的一个简单的规则:

target: source file
    command

其中的target指的我要生成的目标文件!然而再上次的案例中,给的是Hello,最终我要的是a.exe,这两个差的太多,这也就是为什么每次执行make的时候,程序都会被编译一下!因为我要的和我规定的其实不一样!如果一样的话,会是什么结果呢?我们稍微调整一下这个makefile,再来看看效果。新版的makefile如下所示:

Hello.exe: hello.c
    gcc hello.c -o Hello.exe

gcc命令中,-o命令的作用可以理解为给生成的文件指定一个文件名。再这里,最终输出的文件名和target是一样的!接下来我们连续执行两次make来看一下效果:

通过上面的例子我们知道一点:这个target是要拿来做文件对比的!至于make是如何知道我这个编译好的文件是不是最新的,对比一下文件的时间戳,一目了然!

那么问题来了,如果我跟新了我的这个hello.c的源文件,make会重新给编译一个新的Hello.exe出来吗?为此,hello.c又被改回了之前的模样:

新版hello.c:

#include <stdio.h>
 
int main(void)
{
    printf("Hello world\n");
    printf("Hello China\n");
    return 0;
}

文件保存后,再次运行make,果然,给重新编译了!依旧,第二遍执行make的时候,提示文件是最新的!

所以说,这个target文件是确实有用的! 还有什么其他作用呢? 以后学到了继续分享。

2. makefile文件本身的名字

2.1 开头m可大可小

再在之前的文章里,我用的makefile开头一直都是小写,每次运行make的时候,make也会自动找到当前文件下的makefile文件。那么如果把开头的m大写,可以吗?

首先删掉已经编译好的Hello.exe文件,然后单独的改下这个makefile的文件名为大写的Makefile,然后make下看看:

一切正常!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值