Linux操作系统Makefile基本语法

一、Makefile规则格式

目标.....: 依赖文件集合.......
    命令1
    命令2
    .....
main : main.o input.o calcu.o
    gcc -o main main.o input.o calcu.o

        这条规则的目标是 main,main.o、 input.o和 calcu.o是生成 main的依赖文件,如果要更新
目标 main,就必须先更新它的所有依赖文件,如果依赖文件中的任 何一个有更新,那么目标也
必须更新,“更新”就是执行一遍规则中的命令列表。

    Makefile第一条规则的目标成为默认目标,只要默认目标更新了那么就认为 Makefile的工作。

二、 Makefile变量

main : main.o input.o calcu.o
    gcc -o main main.o input.o calcu.o

        上述 Makefile语句中, main.o input.o和 calcue.o这三个依赖文件,输入了两遍,如果Makefile复杂的时候这种重复输入的工作就会非常费时间,而且非常容易输错,为了解决这个问题, Makefile加入了变量支持。下面是使用Makefile变量修改后的文件:

objects = main.o input.o calcu.o 
main: $(objects) 
    gcc -o main $(objects)

         Makefile变量只有只有一种就是字符串类型。

2.1、赋值符“=”

        使用“ “=”在给变量的赋值的时候,不一定要用已经定义好的值,也可以使用后面定义的值
比如如下代码:

name = jack
curname = $(name)
name = hijack

print:
        echo curname: $(curname)

  echo:相当于c语言中的printf语句(语句前加上@就不显示语句运行过程如:@echo curname:$(curname))

运行结果如下:

        通过查看结果可知curname最后的赋值为name的最后一次赋值,所以使用“=”借助另外一个变量,可以将变量的真实值推到后面去定义。也就是变量的真实值取决于它所引用的变量的最后一次有效值。

2.2、赋值符“:=”

       使用:=赋值便可以达到向c语言赋值一样如下图所示:

name = jack
curname := $(name)
name = hijack

print:
        echo curname: $(curname)

运行上面的代码得到一下结果:

 2.3、赋值符“?=”

curname ?= jack

        这条语句表示如果curname前面已经被赋值了就继续使用前面的值这条赋值语句相当于空,如果前面没有被赋值那么curname的值就赋为jack。

2.4、赋值符“+=”

curname += main.o

这条语句的意思为若curname原来的值为add.o input.o运行晚上一句之后则curname的值就变成为add.o input.o main.o。

三、Makefile模式规则

,“%”表示长度任意的非空字符串,比如 “%.c”就是所有的以 .c结尾的文件,类似与通配符。当“ “%”出现在目标中的时候,目标中 “%”所代表的值决定了依赖中的 “%”值。

object=main.o calcu.o input.o
main:object
    gecc -o main $(object)

%.o:%.c
    #命令

clean:
    rm *.o
    rm main

四、Makefile自动化变量

        自动化变量就是完成这个功能的!所谓自动化变量就是这种变量会把模式中所
定义的一系列的文件自动的挨个取出,直至所有的符合模式的文件都取完,自动化变量只应该
出现在规则的命令中。

 五、Makefile伪目标

        Makefile有一种特殊的目标 伪目标,一般的目标名都是要生成的文件,而伪目标不代
表真正的目标名,在执行 make命令的时候通过指定这个伪目标来执行其所在规则的定义的命
令。

.PHONY:clean #伪目标
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值