[英]makefile can't find .o file
我正在使用隐式规则来处理简单的makefile,但并没有真正理解make如何确定其执行顺序。 当我这样设置makefile时,它说找不到Wave.o:
CXX = g++
AudioSample: Wave.o AudioSample.o
$(CXX) -o AudioSample AudioSample.o Wave.o
AudioSample.o: Wave.h PCADPCM.h
$(CXX) -c AudioSample.cpp
Wave.o: Wave.h
终端输出:
g++ -o AudioSample AudioSample.o Wave.o
g++: error: Wave.o: No such file or directory
make: *** [AudioSample] Error 1
但是,当我更改目标的顺序时,它可以正常工作:
AudioSample: Wave.o AudioSample.o
$(CXX) -o AudioSample AudioSample.o Wave.o
Wave.o: Wave.h
AudioSample.o: Wave.h PCADPCM.h
$(CXX) -c AudioSample.cpp
终端输出:
g++ -c -o Wave.o Wave.cpp
g++ -c AudioSample.cpp
g++ -o AudioSample AudioSample.o Wave.o
有什么问题??
仔细检查Makefile
Tabs vs Spaces。
例如,使用Vim编辑器,您可以搜索选项卡/\\t
或将以下内容添加到配置中:
" in ~/.vimrc
listchars=tab:»»,trail:·,nbsp:~
set list
在Wave.o
规则中,您显然具有一个隐藏的Tab (如在我的编辑器中所示):
Wave.o : Wave.h
»»»»»»
此选项卡打破了隐式规则以生成Wave.o
删除多余的Tab,就像第二个Makefile
,其中没有Tab的空间,因为目标是文件的最后一行。
有关信息, Wave.h
是先决条件 , make
不会使用它来猜测源文件名(在这种情况下为Wave.cpp
)。 甚至Wave.o : Wave.cpp
也Wave.o : Wave.cpp
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.