如何使用模式规则添加先决条件,就像我可以定义变量一样?

时间:2015-02-24 21:15:14

标签: makefile gnu-make

我有以下Makefile:

all: foo/bar/baz

foo/%:
    @echo $(VAR)
    cp $@.in $@

# This works
foo/bar/%: VAR := Hello world

# This doesn't
foo/bar/%: foo/bar/%.in

foo/bar/baz.in:
    touch $@

当我运行它时,输出是

Hello world
cp foo/bar/baz.in foo/bar/baz
cp: cannot stat ‘foo/bar/baz.in’: No such file or directory
Makefile:4: recipe for target 'foo/bar/baz' failed
make: *** [foo/bar/baz] Error 1

换句话说,pattern-specific variable rule有效,但声明额外先决条件的等效语法并不适用。我该怎么做呢?

真正的用例是在构建之前复制标头。我写了

obj/subdir/%.o: CPPFLAGS += -Igen/include
obj/subdir/%.o: | gen/include

gen/include:
        # Copy the headers

但标题不会被复制。

1 个答案:

答案 0 :(得分:1)

你不能这样做。模式规则必须在创建规则时定义所有先决条件模式;它们以后不能添加。

编写没有配方deletes the pattern rule的模式规则。