Makefile静态模式

静态模式可以灵活定义多目标的规则。


语法

    <targets...><targets-pattern>:<prereq-patterns...>
    <commands>
    ...
  • targets表示目标集合。
  • target-parrtern表示目标的模式选择。
  • prereq-parrterns表示目标的依赖模式。

例子

objects = foo.o bar.o
    all:$(objects)
    $(objects):%.o:%.c
    $(CC) -c $(CFLAGS) $< -O $@


等价于

    foo.o:foo.c
    $(CC) -c $(CFLAGS) foo.c -o foo.o
    bar.o:bar.c
    $(CC) -c $(CFLAGS) bar.c -o bar.o
  • 目标来自于$objects
  • <targets-pattern>为%.o,意思是targets也就是例子中的objects都是以.o结尾的,<prereq-patterns>为%.c,意思是去掉<targets-pattern>的结尾.o,保持%,并加上.c,形成新的%.c结尾的新集合。
  • %.o表示所有以.o结尾的模板,例子中的foo.o和bar.o,依赖模式%.c取自模式中的%,本例中是foo和bar,加上.c后缀,形成foo.c和bar.c。 
  • $<是自动化变量,表示所有的依赖目标集合。

例子:

files = foo.elc bar.o lose.o
    $(filter %.o $(files)):%.o:%.c
    $(CC) -c $(CFLAGS) $< -o $@

    $(filter %.o,$(files))表示调用 Makefile filter 函数,过滤“$filter”集,只保留其中模式为“%.o”的内容。

发布了146 篇原创文章 · 获赞 160 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/baidu_33879812/article/details/104682801