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

 

posted @ 2020-12-03 14:46  11YS  阅读(58)  评论(0)    收藏  举报