考虑这个makefile:
%: %.c
@echo making $@
@touch $@
.SECONDEXPANSION:
%.pid: $$(basename $$@)
$(<D)/$(<F) --pidfile=$<.pid
这里,第一个规则构建一个程序,第二个规则启动它,生成一个pid文件。 注意:我知道在这个例子中不需要二次扩展;真正的makefile更复杂,我真的需要在那里进行二次扩展。
因此,输入make foo.pid
,我希望Make能够通过第一个规则从foo
构建foo.c
,然后再通过第二个规则运行./foo --pidfile=foo.pid
。
然而,它似乎不起作用:
$ make -f Makefile.test foo.pid
make: *** No rule to make target 'foo.pid'. Stop.
这在某种程度上与模式规则提供的二次扩展依赖关系有关。如果我写
%.pid: %
(即摆脱二次扩张)或foo: %: %.c
(即编写显式静态模式规则),答案 0 :(得分:0)
我认为你的情况在10.5.5匹配任何模式规则中描述。你在这里有一个非终端匹配任何规则,不允许匹配指示特定类型数据的文件名。
如果你让我们说
Django as the freamwork,
PostgreSQL as the DB backend
PostgreSQL PGIS as the geolocation handler
Openstreetmap as the map viewer
它会起作用。