[英]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.