模式规则中的通配符

时间:2014-01-17 18:18:24

标签: makefile gnu-make

在我的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 $@

发生了什么事?

1 个答案:

答案 0 :(得分:3)

我可以完全重现这里的行为。这是一个regression in make 3.82。错误报告附带的讨论建议使用.SECONDEXPANSION来解决问题。我已经尝试过它并在一个简单的测试设置中使用它:

.SUFFIXES:

.SECONDEXPANSION:

%.o: $$(wildcard %.[fF])
    $(FC) $(FFLAGS) -c $< -o $@

使用上面的文件和两个名为test.ftest2.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。