我有一个非常简单的makefile来构建一个静态库,它在GNU make 3.81版本中运行良好多年,但在版本3.82时失败了。
我已经阅读了有关向后兼容性的问题,但这些问题似乎并不适用。我还在这里检查了几个帖子,例如Makefile Syntax: Static library lib$(library).a($objects)和Makefile - to create a static library,但无法找到解决方案。
这是我的makefile:
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)'.
是什么给出的?请帮忙!谢谢!
答案 0 :(得分:0)
file1.o)'
:看起来它在某种程度上包含了文件名/字符串中的右括号“)
”。
尝试明确列出目标文件,例如OBJ_FILES = file1.o file2. file3.o
,或使用其他方式将.cc
替换为.o
。