0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【Makefile】简单介绍

_light 来源:_light 作者:_light 2022-11-18 10:22 次阅读

基本规则

makefile的规则,一般由以下组成

目标: 依赖列表
	命令列表

1、其中第一条规则中的”目标“,将会成为终极目标。我们最终目的,就是为了生成这个目标的

2、每一个规则中的目标。都可以是一个文件,也可以是一个标签

3、每一个规则中的目标,不一定要有依赖

目标:
	命令列表

此时的目标,我们成为”伪目标“

4、每一个规则,也不一定有命令列表

案例

假设我们有三个.c源文件,main.c、f1.c、f2.c

f1.c

#include "stdio.h"

void f1()

{

printf("This is f1
);

}

f2.c

#include "stdio.h"

void f2()

{

printf("This is f2
);

}

然后我们在main里面调用f1与f2这两个函数,接着编译、运行即可

下面我们编写一下Makefile

target:main.c f1.c f2.c
	gcc f1.c f2.c main.c

输入命令 make 即可完成编译

如果不想打印出gcc f1.c f2.c main.c这条命令,可以在Makefile文件中的命令列表前加上一个@符号

变量

创建变量,与shell类似

number = '56',此时,变量number的值就是56,

可以使用echo验证: echo &$number

其中这个符号$就是使用已声明的变量

变量的三种赋值方式

第一种:'=' 称为”延时展开赋值“
	例如:
		temp = $number
		number = '56'
	此时你输出'temp'等于56,所谓延时展开赋值就是当number成功赋值之后,再把number的值赋给temp
第二种:':='称为”立即展开赋值“
    例如:
		temp := $number
		number = '56'
	此时你输出'temp'就为空
第三种:'?='称为条件赋值
	例如:
		temp ?= $number
	假如在这之前没有给变量temp赋过值,那么就会把number的值赋给temp,反之就不会把number的值赋给temp

特殊变量

$@: 当前规则中的目标

$^: 当前规则中的所有依赖

$<: 当前依赖中的第一个

$$: 当前执行的进程的进程编号

$*: 模式规则中的所有%匹配的部分

$?: 模式规则中所有比所在规则中的目标更 新的文件组成的列表

下面借助变量优化一下上述案例的Makefile

SOURCE=main.c f1.c f2.c
target:$(SOURCE)
	gcc $^

模式规则

%.o: %.c
	gcc -c $<

%.c会匹配.c文件前面的部分,相当于shell中的*.c

模式规则执行时,是一个循环取出的过程,每次取出一个.c,调用命令生成对应的.o

模式规则举例

#strat
TARGET = a.out
SRCS = main.c

$(TARGET): $(SRCS:.c = .o)
	gcc $^ -o $@
#$(SRCS:.c=.o) 可以理解为目标所依赖文件是由.c文件生成的.o文件

#模式规则
%.o: %.c
	gcc -c $<   #模式规则每次取出一个,所以这里用$<

#end

写Makefile系列的文章是做个笔记,为了以后方便复习,里面应该有许多BUG,等学一段时间后会继续完善

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Makefile
    +关注

    关注

    1

    文章

    125

    浏览量

    19181
收藏 人收藏

    评论

    相关推荐

    linux系统中Makefile的使用方法

    的基础用法讲起,逐步深入到更高级的应用,为你呈现一个全面而详细的Makefile使用手册。 第一:Makefile的基本结构 一个最简单Makefile包含规则,规则由目标(targ
    的头像 发表于 05-11 08:49 643次阅读

    关于Makefile自动生成-autotools的使用

    Makefile并非日常任务,但遇见需要构建大型软件项目时,利用工具自动生成Makefile就显得尤为关键。接下来,我们将重点介绍一款自动化构建工具——Autoto
    的头像 发表于 07-25 15:50 1495次阅读
    关于<b class='flag-5'>Makefile</b>自动生成-autotools的使用

    怎样去使用Makefile+VCS+Verdi做个简单的Test Bench?

    怎样去使用Makefile+VCS+Verdi做个简单的Test Bench?有哪些操作步骤?
    发表于 06-18 06:28

    驾驭Makefile

    驾驭Makefile在网上你能找到很多关于Makefile的学习资料,但绝大部分给你的只是一个知识点,与将Makefile运用到项目中(尤其是大型项目)的差距非常的大。因为,将Makefile
    发表于 01-05 17:05 9次下载

    关于Linux 2.6内核Makefile的分析

    介绍文章都是基于2.4内核的,可以说关于2.6内核Makefile相关的文章凤毛麟角,笔者抽时间完成了这篇分析文章,让读者迅速熟悉Linux最新Makefile体系,从而加深对内核的理解,同时也希望能
    发表于 11-02 10:12 1次下载

    linux makefile教程

     什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile
    发表于 11-12 09:11 5322次阅读

    makefile的基本语法

     在Makefile中,最重要的三个概念是:目标(target)、依赖关系(dependency)和命令(command)。目标是指要干什么,即运行make后生成什么;依赖是指明目标所依赖的其他目标;命令则告诉make如何生成目标,这三个概念是通过Makefile中的规则
    发表于 11-12 10:15 1.1w次阅读

    Makefile是什么?Makefile工作原理是怎样的?Makefile经典教程免费下载

    Makefile的重要性 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件
    发表于 09-12 17:19 0次下载
    <b class='flag-5'>Makefile</b>是什么?<b class='flag-5'>Makefile</b>工作原理是怎样的?<b class='flag-5'>Makefile</b>经典教程免费下载

    Linux关于Makefile的用法介绍

    Make可以从一个名为Makefile的文件中获得如何构建程序的知识,该文件列出了每个非源文件以及如何从其他文件计算它。当你编写一个程序时,你应该为它编写一个Makefile文件,这样就可以使用Make来编译和安装这个程序。
    发表于 12-24 10:36 1887次阅读

    Makefile的项目模板免费下载

    本文档的主要内容详细介绍的是Makefile的项目模板免费下载 可根据项目名称修改。
    发表于 06-12 08:00 11次下载
    <b class='flag-5'>Makefile</b>的项目模板免费下载

    Linux内核的Makefile、Kconfig和.config文件

    问题都和Makefile、Kconfig、.config有关,下面简单谈谈Makefile、Kconfig和.config。希望对你有启发。 三者的作用: 简单来说就是去饭店点菜:Kc
    的头像 发表于 11-12 17:31 3039次阅读

    芯片设计中的Makefile简单教程

    Makefile可以根据指定的依赖规则和文件是否有修改来执行命令。常用来编译软件源代码,只需要重新编译修改过的文件,使得编译速度大大加快。
    的头像 发表于 12-24 17:41 939次阅读

    嵌入式中的Makefile应用

    文章目录一.Makefile 引入二. Makefile语法1.通配符2.假象目标3.变量三.Makefile函数四.实例本文主要总结一下嵌入式开发中的Makefile,一般项目中都需
    发表于 11-03 17:06 11次下载
    嵌入式中的<b class='flag-5'>Makefile</b>应用

    Makefile简单实用的Makefile模板来了

    【Linux + Makefile简单实用的Makefile模板来了
    的头像 发表于 08-31 12:46 1891次阅读
    【<b class='flag-5'>Makefile</b>】<b class='flag-5'>简单</b>实用的<b class='flag-5'>Makefile</b>模板来了

    Makefile】函数介绍

    Makefile 中调用函数的方法跟变量的使用类似,以“**()”或“**{}”符号包含函数。
    的头像 发表于 11-18 10:23 958次阅读