makefile文件改进自动添加头文件

1 基础知识复习    
目标:依赖1 依赖2
[TAB]命令  
当"目标文件"不存在, 或某个依赖文件比目标文件"新",则: 执行"命令"
makefile 语法        

a. 通配符: %.o
   $@ 表示目标
   $< 表示第1个依赖文件
   $^ 表示所有依赖文件
b. 假想目标: .PHONY
c. 即时变量、延时变量, export
简单变量(即时变量) :
A := xxx   # A的值即刻确定,在定义时即确定
B = xxx    # B的值使用到时才确定
:=   # 即时变量
=    # 延时变量
?=   # 延时变量, 如果是第1次定义才起效, 如果在前面该变量已定义则忽略这句
+=   # 附加, 它是即时变量还是延时变量取决于前面的定义        

003_Makefile函数
a. $(foreach var,list,text)
b. $(filter pattern...,text)      # 在text中取出符合patten格式的值
   $(filter-out pattern...,text)  # 在text中取出不符合patten格式的值
c. $(wildcard pattern)            # pattern定义了文件名的格i式,
                                  # wildcard取出其中存在的文件
d. $(patsubst pattern,replacement,$(var))  # 从列表中取出每一个值
                                           # 如果符合pattern
如下makefile文件
  1 A=q w e
  2 
  3 B=$(foreach n,$(A),$(n).o)
  4 
  5 C=a b c d/
  6 D=$(filter %/,$(C))
  7 E=$(filter-out %/,$(C))
  8 
  9 files=$(wildcard *.c)
 10 file0=a.c b.c c.c d.c
 11 file1=$(wildcard $(file0))
 12 all:
 13         @echo B=$(B)
 14         @echo D=$(D)
 15         @echo E=$(E)
 16         @echo files=$(files)
 17         @echo file1=$(file1)    

当前目录文件为    
[email protected]:~/myFile/k$ ls
a.c  b.c  makefile

相应的输出结果为:
[email protected]:~/myFile/k$ make
B=q.o w.o e.o
D=d/
E=a b c
files=a.c b.c
file1=a.c b.c

自动添加头问价  
gcc -c -o c.o c.c -MD -MF c.d  // 编译c.o, 把依赖写入文件c.d     c.d问价将包含生成程序所需的头文件信息        
则相应的Makefile文件为:        
 1 objs =b.o helloWorld.o
  2 devfile:=$(patsubst %,.%.d,$(objs))
  3 devfile:=$(wildcard $(devfile))
  4 
  5 test:$(objs)
  6         gcc -o $@ $^
  7         #@echo devfile =$(devfile)
  8         @echo $(B)
  9 ifneq ($(devfile),)
 10 include $(devfile)
 11 endif
 12 %.o:%.c
 13         gcc -c -o $@ $< -MD -MF [email protected]
 14 clean :
 15         rm -rf %.o
 16 .PHONY:clean
如此将自动添加相应的头文件

猜你喜欢

转载自blog.csdn.net/dmc111qwf/article/details/80145599