在我的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 $@
发生了什么事?
答案 0 :(得分:3)
我可以完全重现这里的行为。这是一个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。