大白话makefile入门基础那些事

据说做为高级工程师,一定会一点Makefile,那作为小白呢,也是可以做到的,本篇就用大白话跟大家梳理下,索性记录下点滴。留给自己也留给他人。

基本认识

    程序员敲代码呢,大部分都是从一个hello world 开始的,那也不例外,从一个简单的main函数说起。这里就不对语言本身做过多的描述。我们就直奔主题。

图片

基本语法格式

基本语法格式就是:

目标:依赖          命令

概念多了,也迷糊,直接一步一步实践。新建一个main.c

#include<stdio.h>int main(){        printf("Program start - Enter main\r\n");        return 0;}

在linux环境下 输入

gcc  main.c -o main

生成可执行程序 main

相信大家对这个操作,都不陌生。

    这个输入命令“gcc  main.c -o main” 生成可执行文件的过程,可以以某种规则的形式放进makefile文件里,让make工具帮你一步一步解析执行。这就是Makefile的作用,对的!就是这么简单。

入门操作

      那我们把上边的过程放到基本语法格式中。进行对应,

  • 1.生成的可执行程序main 就是你的目标

  • 2.这里没有依赖任何文件

  • 3.执行了gcc main.c -o main 就是命令。

新建一个Makefile文件,按照格式把这个内容 放入一个名叫Makefile的文件中

main:  gcc main.c -o main

保存,然后执行make,便会生成可执行程序main。对!Makefile就是这么简单。

这里说明下:

  • make 是一个独立的解释程序,是用来解析Makefile的。

  • 程序编译,是Makefile中的命令调用了编译器gcc来完成编译的。这个概念要理清。

=====

至此,恭喜你已经入门了!

======

入门之后

相信有的读者,已经要问了,我代码中有很多c文件呀。要怎么做。比如在main中调用其他文件的函数。废话不多说。

新建一个文件fun_a.c​​​​​​​

#include "stdio.h"int fun_a(){   printf("i am fun_a\r\n");   return 1;}

按照同样的操作,我们可以把此文件的编译过程放入Makefile文件中。

在放入之前,先手动把命令执行下。

gcc fun_a.c -o fun_a

图片

这个时候会报错。在这里要简单解释一下程序编译的过程,大神可以忽略哈,

一个可执行程序的生成经过:预编译---编译---链接。

  • 预编译就不解释了。

  • 编译是把.c文件编译为.o

  • 链接是把.o文件链接为可执行程序

回到遇到的问题,因为fun_a是子函数非主函数,我们需要把fun_a先编译为.o

gcc -c fun_a.c -o fun_a.o

而之前执行的 gcc  main.c -o main 是一步到位,把中间过程省略了。​​​​​​​

main:  gcc main.c -o main fun_a.o:  gcc -c fun_a.c -o fun_a.o

现在把函数调用放入main中​​​​​​​

#include<stdio.h>extern int fun_a();int main(){   printf("Program start - Enter main\r\n");       fun_a();   return 0;}

执行

gcc main.c -o main

图片

会提醒你找不带定义,这是因为 main中调用了 fun_a 而你虽然在上一步生成了fun_a.o但没有告诉gcc 链接进去。

可以输入:

gcc main.c -o main fun_a.o

可以看到程序正常生成,并能够运行。

图片

现在,我可以把以上的操作的命令放到Makefile中。​​​​​​​

main:  gcc main.c -o main fun_a.o fun_a.o:  gcc -c fun_a.c -o fun_a.o

在执行make之前,我们先把之前手动生成的.o 文件删除。

然后执行make.

图片

哦?报错了!

原因是fun_a.o文件没有。

回到我们之前提到的 Makefile的基本格式。我们始终没有填写依赖项,而根据之前的操作来看,我们是需要fun_a.o的。于是,在依赖项处填上需要的文件名。​​​​​​​

main:fun_a.o  gcc main.c -o main fun_a.ofun_a.o:  gcc -c fun_a.c -o fun_a.o

继续执行make。生成了 可执行程序。对的!就是这么简单!

=====

至此,恭喜你已经掌握了Makefile的基本知识,可以随心所欲的去改写你的Makefile文件,让make完美的为你服务了。

=====

网上有很多教程。可能看了很多,不如自己去操作一遍。

Makefile还有很多其他的技巧,这里就不展开了,如果感兴趣,后续可以再补充哈,

希望这一步一步的操作,能帮助到你。也可以关注交流。

最后,如果要深入研究,可以异步GNU官网了解哈。

GNU Make Manual - GNU Project - Free Software Foundation

图片

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值