簡體   English   中英

Makefile無法找到* .o文件來制作.exe

[英]Makefile is not able to find *.o files to make the .exe

這是我的目錄結構:

$ ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
   .
   |-Build
   |---Bin
   |-Include
   |-Lib
   |-Source

這是我的makefile:

Gaurav@Gaurav-PC /cygdrive/d/Pizza/Build
$ pwd
/cygdrive/d/Pizza/Build

Gaurav@Gaurav-PC /cygdrive/d/Pizza/Build
$ ls
Bin  Makefile

Gaurav@Gaurav-PC /cygdrive/d/Pizza/Build
$vim Makefile

INCLUDES= ./../Include
OBJDIR= ./Bin
SRCDIR= ./../Source

vpath %.h $(INCLUDES)
vpath %.cpp $(SRCDIR)
vpath %.o $(OBJDIR)

CXX= g++
CXXFLAGS= -Wall -c -I$(INCLUDES)


OBJECTS= Pizza.o PizzaClassMain.o


Pizza: $(OBJECTS)
    $(CXX) -Wall $^ -o $(OBJDIR)/$@ 


PizzaClassMain.o:PizzaClassMain.cpp Pizza.h
    $(CXX) $(CXXFLAGS) $< -o $(OBJDIR)/$@

Pizza.o: Pizza.cpp Pizza.h
    $(CXX) $(CXXFLAGS) $< -o $(OBJDIR)/$@

.PHONY: clean

clean:
    rm -f $(OBJDIR)/*.o $(OBJDIR)/*.exe *~ .Makefile.un~ 

我得到以下錯誤:

$ make
g++ -Wall -c -I./../Include ./../Source/Pizza.cpp -o ./Bin/Pizza.o
g++ -Wall -c -I./../Include ./../Source/PizzaClassMain.cpp -o ./Bin/PizzaClassMain.o
g++ -Wall Pizza.o PizzaClassMain.o -o ./Bin/Pizza
g++: error: Pizza.o: No such file or directory
g++: error: PizzaClassMain.o: No such file or directory
g++: fatal error: no input files
compilation terminated.
Makefile:18: recipe for target 'Pizza' failed
make: *** [Pizza] Error 1

我已經在我的Makefile放入了vpath %.o $(OBJDIR) ,但仍然rule: Pizza不能在目錄./Bin正確創建Pizza.oPizzaClassMain.o./BinPizza.oPizzaClassMain.o規則PizzaClassMain.o

如果我從目錄./Bin手動運行g++ -Wall g++ -Wall Pizza.o PizzaClassMain.o -o Pizza ,那么它可以正常工作。

我無法弄清楚為什么Pizza規則找不到input files 誰能幫忙嗎?

PS:這個Makefile確實成功編譯了40次,但是一次成功編譯了兩次。 cygwin軟件包make是否存在一些問題?

您的對象應該是:

 OBJECTS= ./Bin/Pizza.o ./Bin/PizzaClassMain.o

通過規則PIZZA,這些對象已成功編譯:$(OBJECTS)找到名為“ Pizza.o”和“ PizzaClassMain.o”的正確規則。 這些只是規則的名稱,不是實際的文件名。 當Make實用程序尋找./Build/Pizza.o時,此文件不存在,也找不到。 它是在./Build/Bin目錄中創建的。

以下規則更改解決了該問題:

Pizza: $(OBJECTS)
    $(CXX) -Wall $(addprefix $(OBJDIR)/,$^) -o $(OBJDIR)/$@ 

正如OliCharlesworth所指出的,非常棒的文章http://mad-scientist.net/make/vpath.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM