gpt4 book ai didi

c++ - makefile 找不到 .o 文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:21 26 4
gpt4 key购买 nike

我正在使用隐式规则处理一个简单的 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 中的制表符与空格。

例如,使用 Vim 编辑器,您可以搜索选项卡 /\t 或将以下内容添加到您的配置中:

" in ~/.vimrc
listchars=tab:»»,trail:·,nbsp:~
set list

您显然在 Wave.o 规则中有一个隐藏选项卡(如我的编辑器中所示):

Wave.o : Wave.h
»»»»»»

这个 tab 打破了生成 Wave.o 的隐式规则。删除额外的 Tabs,它会像你的第二个 Makefile 一样没有问题,因为目标是文件的最后一行。

有关信息,Wave.h 是一个先决条件make 不使用它来猜测源文件名(Wave .cpp 在这种情况下)。即使 Wave.o : Wave.cpp 也无济于事。

关于c++ - makefile 找不到 .o 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30175375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com