Makefile简笔记

2020-06-27  本文已影响0人  大亮x

一、Makefile 变量


#Makefile变量的使用

objects = main.o input.o calcu.o

main: $(objects)

gcc -o main $(objects)

二、符号介绍

1、“@”


#Make 在执行的过程中会自动输出命令执行过程,在命令前面加上“@”的话就不会输出命令执行过程,

name = daliang

print:

    @echo myID: $(name)

输出结果:

myID: daliang

2、“=”、“:=”、“?=”、“+=”


“=” :赋给最终的变量值,如:

name = DL

curname = $(name)

name = dalaing

print:

    @echo myID: $(curname)

输出结果:

myID: daliang  而不是 myID: DL  !!!

“:=”:赋给现有变量的值,如:

name = DL

curname := $(name)

name = dalaing

print:

    @echo myID: $(curname)

输出结果:

myID: DL    !!!

"?=":是否已被赋值,如果没有就进行赋值

name ?= Daliang

#是否name已被赋值,如果没有就赋值为Daliang

“+=”:变量追加

objects = main.o inpiut.o

objects += calcu.o

3、“%”


“%”表示长度任意的非空字符串,如:

%.c 表示所有.c文件

a.%.c表示所有以a.开头,.c结尾的文件

三、Makefile 自动化变量

1、"$@"


如果有多个目标,“$@”表示定义的目标集合。

2、"$<"


依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%” )定义的,那么“$<”就是符合模式的一系列的文件集合。

3、"$^"


所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,“$^”会去除重复的依赖文件,值保留一份。

例子


例一:

objs := start.o main.o

ledc.bin:$(objs)

arm-linux-gnueabihf-ld -Ttext 0X87800000 -o ledc.elf $^

arm-linux-gnueabihf-objcopy -O binary -S ledc.elf $@

这里的 $^ 指的是所有依赖集合: start.o main.o

这里的 $@ 指的是所有目标集合:ledc.bin

例二:

%.o:%.s

arm-linux-gnueabihf-gcc -Wall -nostdlib -c -o $@ $<

这里的 $@ 指的是所有目标集合,也就是所有的 .o 文件

这里的 $< 指的是依赖文件%.s的集合

四、Makefile伪目标


.PHONY : clean

clean:

    rm *.o

    rm main

使用.PHONY声明 clean 为伪目标以后不管当前目录下是否存在名为“clean”的文件,输入“make clean”的话规则后面的 rm 命令都会执行。

上一篇 下一篇

猜你喜欢

热点阅读