使用此简化示例Makefile
PHONY: all
all: prog_main
prog_main.c:
echo 'int module(); int main(){return module();}' > $@
module.c:
echo 'int module(){return 0;}' > $@
main_objects := module.o
prog_%: prog_%.o $(%_objects)
$(CC) -o $@ $< $($*_objects)
make
将失败,因为
$(%_objects)
,module.o
不是prog_main
,module.o
和module.o
。有没有办法告诉make,每个prog_%
取决于prog_%.o
以及变量%_objects
中列出的目标?
答案 0 :(得分:2)
你不能做你所描述的那样,因为make会在处理过程中的不同时间扩展%
和变量。但您可以使用main_objects := module.o
替换该行:prog_main: modules.o
。如果您这样做,那么module.o
会在$^
食谱的prog_%:
中显示。所以你会有类似的东西:
.PHONY: all
all: prog_main
prog_main.c:
echo 'int module(); int main(){return module();}' > $@
module.c:
echo 'int module(){return 0;}' > $@
# main_objects := module.o
prog_main: module.o
prog_%: prog_%.o
$(CC) -o $@ $^