Makefile学习

13 篇文章 0 订阅

目录

一、Makefile是什么

二、Makefile编写规则

三、实战演练


一、Makefile是什么

        假如有一个工程文件,源文件很多,如果一个一个编译,那么效率会很低。怎么办呢?作为一名优秀的程序员,我们必须要学会使用Makefile,这将极大地提高了软件开发的效率。  

        Makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

        我们使用Makefile最大的好处就是它能够“自动化编译”,Makefile一旦写好,只需要一个make命令,整个工程完全自动编译。

        而make则是一个命令工具,是一个解释makefile中指令的命令工具。make命令会在当前目录下按顺序寻找文件名为“makefile”、“Makefile”的文件,找到后就解释并执行该文件,如果找不到就提示错误并退出。

二、Makefile编写规则

        在这里给大家整理一下Makefile的通用结构:

#以"#"开头的行表示注释

#定义变量var,强制赋值为test
var=test

#在var之前定义的值后面再追加app这个值,这时该变量值扩展为testapp
var+=testapp

#如果之前var没有被定义,则定义并使用testapp,否则使用之前的值
var?=testapp

#第一条目标为总目标

target:depend1 depend2......
[TAB]action1
[TAB]action2

相关说明:

(1)target:规则的目标,是必须要有的。

(2)depend:是我们的依赖文件,要生成需要的文件或者是目标。可以是多个,用空格隔开,也可以是没有;

(3)action:make 需要执行的命令。可以有多条命令,每一条命令占一行;

三、实战演练

第一步:

        创建一个文件夹,并在其目录下创建两个文件夹./src(存放源代码)和./bin(存放可执行文件),如图所示:

第二步:

        在src下写三个源代码programA.c、programB.c、programD.c。如图所示:

                                                                                                         
/*programA.c*/

#include <stdio.h>

int main(int argc,char *argv[])
{
    printf("A!\n");

    return 0;
}
                                                                                                         
/*programB.c*/

#include <stdio.h>

int main(int argc,char *argv[])
{
    printf("B!\n");

    return 0;
}
                                                                                                         
/*programD.c*/

#include <stdio.h>

int main(int argc,char *argv[])
{
    printf("D!\n");

    return 0;
}

第三步:

        编写makefile文件,实现将源文件统一编译,并将可执行文件保存至../bin文件下,还要实现可执行文件统一执行。

        首先,在src路径下创建一个名为makefile的文件,如图所示:

        然后,让我们一起来编写makefile文件吧,代码如下:

/*makefile*/

#定义变量指定生成的可执行文件的路径
FILEPATH=`pwd`/../bin/

#定义编辑器
CC=gcc

#这里的all是整个makefile的总目标,当我们输入make这个命令时,就是执行要完成这个目标。该目标有一个依赖和两个动作。
#所以整个makefile需要先执行compile,执行完才能去执行后面的动作。
#@符会让执行make名时不打印这两条命令本身,而只是输出命令执行的结果。
all: compile 
    @make install
    @make clear

#编译源代码
compile:
    ${CC} programA.c -o programA.out
    ${CC} programB.c -o programB.out
    ${CC} programD.c -o programD.out

#install是一个单独的目标,用来将编译生成的可执行文件拷贝到相应的安装路径下,总目标下@make install命令会执行该动作
install:
    cp -rf *.out ${FILEPATH}

#uninstall是一个单独的目标,用来删除安装路径下的可执行文件。
#如果想要执行该动作,需要在Linux下输入make uninstall来执行。
uninstall:
    cd ${FILEPATH} && rm -f *.out

#删除src路径下生成的可执行文件,总目标下@make clear命令会执行该动作
clear:                                           
    rm -f *.out                        

#运行安装路径下的可执行文件
#如果想要执行该动作,需要在Linux下输入make run来执行。
run:
    cd ${FILEPATH} && ./programA.out && ./programB.out &&./programD.out

第四步

        熟练使用make命令,此时在终端输入make,系统就会自动实现all目标下的compile、@make install和@make clear。如图所示:

        我们可以看到,源文件成功编译并安装到相应的路径下,且该路径下的生成文件会自动删除。

        接下来我们可以使用make run命令运行刚刚在相应路径下生成的可执行文件,如图所示:

         运行结束后,我们可以使用make uninstall命令删除刚刚在相应路径下生成的可执行文件,如图所示:

         以上,就是关于makefile的基础用法,未来我会继续深入研究makefile,感谢大家的支持!

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力学代码的小信

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值