【发布时间】:2014-01-05 23:05:44
【问题描述】:
我有一个非常简单的 makefile 来构建一个静态库,它在 GNU make 版本 3.81 上运行良好多年,但在版本 3.82 上运行失败。
我已阅读有关向后兼容性的问题,但这些问题似乎并不适用。我也查了这里的几个帖子,比如Makefile Syntax: Static library lib$(library).a($objects)和Makefile - to create a static library,但是找不到解决办法。
这是我的生成文件:
FILES = file1.cc file2.cc file3.cc
OBJ_FILES = $(FILES:.cc=.o)
libname.a: libname.a($(OBJ_FILES))
在 3.81 版本下,使用内置和隐式规则可以很好地编译。 样本输出
g++ -c -o file1.o file1.cc
ar rv libname.a file1.o
ar: creating libname.a
a - file1.o
但是对于 3.82 版它失败了
*** No rule to make target `file1.o)'
我查看了 make -d 的输出,3.82 版失败了
No implicit rule found for `file1.o)'.
Finished prerequisites of target file `file1.o)'.
Must remake target `file1.o)'.
make: *** No rule to make target `file1.o)', needed by `libname'. Stop.
而 3.81 版继续顺利
Trying implicit prerequisite `file1.o'.
Looking for a rule with intermediate file `file1.o'.
<snip>
Found an implicit rule for `libname.a(file1.o)'.
什么给了?请帮忙!谢谢!
【问题讨论】: