Linux学习之make Makefile

目录

make

Makefile(makefile)

规则格式

变量

赋值符

"="

 ":="

"?="

"+="(变量追加)

模式规则

 伪目标

声明格式


make

        工具,可以自动完成编译工作:

                1、修改了某几个源文件,只重新编译这几个源文件

                2、修改了某个头文件,重新编译所有包含该头文件的源文件

        通过Makefile的文件(自行编写)来完成并自动维护编译工作

Makefile(makefile)

规则格式

target: prerequisites

        command1

        command2

        ……

        命令必须以Tab键开始

        make命令会执行Makefile中的以Tab开始的命令

target目标文件,是命令执行后生成的目标
prerequisites要生成target所需要的文件或者是目标
commandmake需要执行的命令

        make会从默认目标(第一个目标)往下执行,只要默认目标更新了,就会认为Makefile执行完成。

        clean没有依赖文件,会默认为依赖文件都是最新的,所以其对应的命令不会执行。当想执行clean时,使用命令"make clean"

变量

        Makefile中的变量都是字符串

变量变量名=字符串objects = main.o input.o calcu.o
引用$(变量名)$(objects)
注释使用符号'#'#Makefile变量的使用

赋值符

"="

        

         (Makefile中,echo输出一串字符,@echo不会输出命令执行过程) 

        无论“name”的值在“curname”哪里被赋值,print输出的结果都为“name”最后一次有效赋值的结果

 ":="

        curname := $(name)

        结果为"curname"赋值前name的值

"?="

        curname ?= zuozongkai

         "curname"前面有被赋值,使用之前的值;没有"curname"="zuozongkai"

"+="(变量追加)

        objects = main.o input.o calcu.o 

模式规则

        为了将所有的.c文件编译成.o文件:"a.%.c",表示以a.开头,以.c结束的所有文件

        为了通过一行命令来从不同的依赖文件中生成对应的目标:自动化变量

自动化变量描述
$@

规则中的目标集合。

目标是一个文档文件,它代表这个文档的文件名

在多目标模式规则中,它代表的是触发规则被执行的文件名。

$%当目标是函数库时,表示规则中的目标成员名;否则,其值为空
$<

依赖文件集合中的第一个文件

如果是一个目标文件使用隐含的规则来重建,则它代表由隐含规则加入的第一个依赖文件。

$?所有比目标新的依赖目标集合,以空格分开
$^所有依赖文件的集合,使用空格分开。如果有重复,会保留一份
$+与"$^"类似。区别:如有重复,不去除
$*表示目标模式中"%"及其之前的部分

 伪目标

        一般的目标名都要生成文件,伪目标不需要生成文件。在执行make命令时,通过指定这个伪目标来执行其所在规则定义的命令

        避免Makefile中定义的只执行命令的目标(clean)和工作目录下的实际文件名字冲突,导致当执行"make clean"时,目标(clean)因为没有依赖文件,被认为是最新的,后面的命令将不会执行

声明格式

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值