Makefile 的知识

1. Makefile 语法

                           生成的文件(targets):依赖的文件(prerequisites )

                                                文件如何生成 (recipe)

test.o : a.o,b.o,c.o
            gcc -o a.o b.o c.o

a.o: a.c
      gcc -c a.o a.c

b.o: b.c
       gcc -c b.o b.c

c.o: c.c
      gcc -c c.o c.c

其中代码前面的空当不是空格而是Tab

2.可是这个样子太麻烦了如果有很多的文件会写的很长 所以此时我们需要一些通用服去代表所有的文件

test:a.o b.o
        gcc -o test a.o b.o

%.o: %.c
    gcc -c -o $@ $<

其中 $@ 表示的是目标文件(,o文件)

$<表示的是第一个依赖文件(第一个.c文件)

如果使用$^ 表示所有的依赖文件

test:$^
        gcc -o test a.o b.o

%.o: %.c
    gcc -c -o $@ $<

.PHONY 这个是为了当有其他文件被叫做clean的时候执行不了文件 所以需要加上它

3. 立即变量:

                 A  := abc 

4.  延迟变量: 只是在使用的时候才赋值 只是会得到最后得值

    A = $(C)

   C= 124

  C= 123

   此时A为123

5. append Plus += 不会覆盖原来的值会在后面增加新的值

   

6. 函数的运用:

     A = a b c

     B = $(foreach f, $(A), $(f).o)

all:

       @echo B = $(B)

把叫A变量里面每个名字叫a b c de文件变成.o的形式

    

$(filter patent, text)

在字符串中选择符合patent格式的值

$(filter-out patent, text)

在字符串中选择不符合patent格式的值

 注意patent 要加%

$(wildcard patent)

是否真实存在像patent格式那样的文件

$(patsubst patent replacement text)

把text中的patent替换成replacement。。

猜你喜欢

转载自www.cnblogs.com/shwzh1990/p/11230107.html