Makefile make模式规则中的计算依赖关系
使用此简化示例Makefile make模式规则中的计算依赖关系,makefile,gnu-make,Makefile,Gnu Make,使用此简化示例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 $@ $<
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)
PHONY:all
全部:主程序
主程序c:
echo'int模块();int main(){return module();}'>$@
模块c:
echo'int module(){return 0;}'>$@
主对象:=模块.o
进度%:进度%%o$(\u对象)
$(CC)-o$@$<$($*\u对象)
make
将失败,因为
- make不支持语法
,将忽略该语法$(\u objects)
不是module.o
的依赖项prog\u main
- make认为无需编译
,以及模块.o
- 链接失败,因为没有
模块.o
有没有办法告诉make,每个
prog%
都取决于prog%
和变量%\u对象中列出的目标?你不能做你所描述的make在处理过程中的不同时间扩展%
和变量。但是您可以将行:main\u objects:=module.o
替换为prog\u 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 $@ $^
您不能在处理过程中的不同时间执行所描述的make扩展%
和变量。但是您可以将行:main\u objects:=module.o
替换为prog\u 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 $@ $^