Makefile简单规则-笔记

makefile基本规则:

目标: 依赖
    语句 # 这行前是一个tab

Makefile模板

#!/usr/bin/make -f

# 调用shell命令
ARCH = $(shell arch)

# 声明伪目标 clean(即实际不生成clean目标)
.PHONY: clean

# 目标a(无依赖)
a:
    # a目标的动作;@符号表示不打印命令,只显示结果
        @echo "arch = $(ARCH)"

# 目标b,依赖目标a(即,先执行目标a的动作,再执行目标b的动作)
b: a
        @echo bbbbbbb
        touch bbb

c: b
        echo 'xxxxxxxxxxxxxxxx' > bbb

# 目标d依赖test.txt文件,如果没有test.txt则报错
d: test.txt
        # 表示当前依赖的内置变量$< == 'test.txt'
        echo 'abcdefghijklmnopqrst' > $<
        # 表示当前目标的内置变量$@ == '目标'
        echo '目标' > $@

clean:
        rm bbb


  • 关于变量

  1. 变量的=赋值:
    var1 = foo
    var2 = $(var1)

    (这样的变量赋值是全局的,即var1和var2先后顺序无关——应该是处理全部的变量后再确认变量的值)
  2. 变量的:=赋值:
    x := foo
    y := $(x) bar
    x := later

    (:= 只能使用在前面已经定义的赋值过的变量,而不管后面这个变量怎么赋值的;显然这种赋值方法更可控些)

  3. 变量的?=赋值:
    var ?= foo
    (?=会先检查var是否已经被定义过,当var还未定义才会将foo赋值给var)

  4. 变量的+=赋值:
    var += foo
    (将foo追加到变量var上)

  5. 静态模式:
    objects = foo.o bar.o
    all: $(objects)
    $(objects): %.o: %.c # 这里的%.o先匹配所有.o后缀的目标集合,然后%.c表示为这个集合的名称加上.c作为后缀并形成一个集合
    $(CC) -c $(CFLAGS) $< -o $@ # $< 表示依赖集合,$@表示目标集合

    (就是用%时,先表示获取匹配的集合,然后才用%来表示通配符)

猜你喜欢

转载自blog.csdn.net/u013390088/article/details/80776653