make模式规则中的计算依赖项

时间:2017-05-17 09:48:18

标签: 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 $@ $< $($*_objects)

make将失败,因为

  • make不支持语法$(%_objects)
  • module.o不是prog_main
  • 的依赖关系
  • make看不需要编译module.o
  • 链接失败,因为没有module.o

有没有办法告诉make,每个prog_%取决于prog_%.o以及变量%_objects中列出的目标?

1 个答案:

答案 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 $@ $^