簡體   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