繁体   English   中英

makefile找不到.o文件

[英]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.cppWave.o : Wave.cpp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM