Makefile
自动化变量
| 自动化变量 | 描述 |
| $@ | 规则中的目标集合,在模式规则中,如果有多个目标的话,“$@”表示匹配模 式中定义的目标集合。 |
| $% | 当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件, 那么其值为空。 |
| $< | 依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%” )定义的,那么 “$<”就是符合模式的一系列的文件集合。 |
| $? | 所有比目标新的依赖目标集合,以空格分开。 |
| $^ | 所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件, “$^”会去除重复的依赖文件,值保留一份。 |
| $+ | 和“$^”类似,但是当依赖文件存在重复的话不会去除重复的依赖文件。 |
| $* | 这个变量表示目标模式中"%"及其之前的部分,如果目标是 test/a.test.c,目标模 式为 a.%.c,那么“$*”就是 test/a.test |
伪目标
clean: rm *.o rm main
伪目标的主要是为了避免 Makefile 中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突 。
如果在目录中有clean这个文件,当执行make clean就会没有依赖文件,会被认为是最新的,后面的rm命令就不会执行,没办法clean
可以声明为:.PHONY : clean
mytest: @echo 'ARCH=' $(ARCH) @echo 'CPU=' $(CPU) @echo 'BOARD=' $(BOARD) @echo 'VENDOR=' $(VENDOR) @echo 'SOC=' $(SOC) @echo 'CPDDIR=' $(CPUDIR) @echo 'BOARDDIR=' $(BOARDDIR)
ARCH= arm
CPU= armv7
BOARD= cyclone5-socdk
VENDOR= altera
SOC= socfpga
CPDDIR= arch/arm/cpu/armv7
BOARDDIR= altera/cyclone5-socdk

浙公网安备 33010602011771号