在我的 Makefile
中,我有一个编译 Fortran 源文件的规则,如下所示
.SUFFIXES:
%.o: %.[fF]
$(FC) $(FFLAGS) -c $< -o $@
这在多台机器上运行良好。当我在另一台机器上尝试它时(顺便说一句,使用更新(GNU)make
,3.82而不是3.81),它不起作用,我不得不用两个替换它.f
和 .F
的单独规则。
通配符无需 %
即可工作,即:
.SUFFIXES:
test.o: test.[fF]
$(FC) $(FFLAGS) -c $< -o $@
这是怎么回事?
最佳答案
我可以在这里完全重现该行为。这是一个regression in make 3.82 。错误报告附带的讨论建议使用 .SECONDEXPANSION
解决这个问题。我已经尝试过并让它在简单的测试设置中工作:
.SUFFIXES:
.SECONDEXPANSION:
%.o: $$(wildcard %.[fF])
$(FC) $(FFLAGS) -c $< -o $@
使用上面的文件和两个名为 test.f
和 test2.F
的测试文件,下面是我发出的几个命令以及 Makefile 生成的输出:
$ make -n test2.o
f77 -c test2.F -o test2.o
$ make -n test.o
f77 -c test.f -o test.o
该解决方法适用于 3.81 和 3.82。
关于makefile - 模式规则中的通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21193024/