makefile - 模式规则中的通配符

标签 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 $@

这是怎么回事?

最佳答案

我可以在这里完全重现该行为。这是一个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。

关于makefile - 模式规则中的通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21193024/

相关文章:

android ffmpeg编译错误

c++ - 使用ar将静态库合并到Makefile中

c - 使不同的可执行文件成为一个供所有人使用的库

c++ - 创建静态链接所有依赖项的共享 .so 库

c - 如何在 Makefile 中实现 "make install"?

linux - 在 OpenSuSE 11.4 上安装 Perl 的 WWW::Mechanize::Firefox - 导致一些烦人的错误

makefile - 对子目录使用 GNU Make

Qt pro文件调用另一个makefile

makefile - 模式规则取决于另一个模式规则

unix - 是否应该在 Makefile 中使用局部变量的较长同义词?