2013-03-13 27 views
-1

我試過在過去的半小時內搜索某個類似問題的人,但是我找不到任何爲什麼這表明文件是最新的當它根本不存在時。Makefile聲明一個文件是在它不是時創建的

這裏的makefile文件,因爲它現在是:

SOURCES = \ 
Core\SnowApp.cpp \ 
Core\SnowApp_Render.cpp \ 
Core\SnowApp_Tick.cpp \ 
Core\InputState.cpp \ 
Graphics\RenderingScreen.cpp \ 
Graphics\SpriteSheet.cpp \ 
Maps\Map.cpp \ 
Entities\Entity.cpp \ 
Entities\MovingEntity.cpp \ 
Entities\Player.cpp \ 

_SOURCES = $(SOURCES:.cpp=.o) 
OBJECTS = $(subst \,_,$(_SOURCES)) 
SRCDIR=src 
OBJDIR=obj 
BINDIR=bin 
EXECUTABLE=snow.exe 

CFLAGS= -c -Wall 
LFLAGS= -o 
LLIBS= -lmingw32 -lSDLmain -lSDL 
CC=g++ 

COMPILE=$(CC) $(CFLAGS) $(LFLAGS) [email protected] $< 
LINK=$(CC) $(LFLAGS) [email protected] $^ $(LLIBS) 

$(BINDIR)\$(EXECUTABLE): $(addprefix $(OBJDIR)\,$(OBJECTS)) 
    $(LINK) 

$(OBJDIR)\Core_SnowApp.o: \ 
$(SRCDIR)\Core\SnowApp.cpp $(SRCDIR)\Core\SnowApp.h \ 
$(SRCDIR)\Graphics\RenderingScreen.h $(SRCDIR)\Maps\Map.h \ 
$(SRCDIR)\Core\InputState.h 
    $(COMPILE) 

$(OBJDIR)\Core_SnowApp_Render.o: \ 
$(SRCDIR)\Core\SnowApp_Render.cpp $(SRCDIR)\Core\SnowApp.h \ 
$(SRCDIR)\Graphics\RenderingScreen.h 
    $(COMPILE) 

$(OBJDIR)\Core_SnowApp_Tick.o: \ 
$(SRCDIR)\Core\SnowApp_Tick.cpp $(SRCDIR)\Core\SnowApp.h 
    $(COMPILE) 

$(OBJDIR)\Core_InputState.o: \ 
$(SRCDIR)\Core\InputState.cpp $(SRCDIR)\Core\InputState.h 
    $(COMPILE) 

$(OBJDIR)\Graphics_SpriteSheet.o: \ 
$(SRCDIR)\Graphics\SpriteSheet.cpp $(SRCDIR)\Graphics\SpriteSheet.h 
    $(COMPILE) 

$(OBJDIR)\Graphics_RenderingScreen.o: \ 
$(SRCDIR)\Graphics\RenderingScreen.cpp $(SRCDIR)\Graphics\RenderingScreen.h \ 
$(SRCDIR)\Graphics\SpriteSheet.h 
    $(COMPILE) 

$(OBJDIR)\Maps_Map.o: \ 
$(SRCDIR)\Maps\Map.cpp $(SRCDIR)\Maps\Map.h \ 
$(SRCDIR)\Graphics\RenderingScreen.h $(SRCDIR)\Core\InputState.h 
    $(COMPILE) 

$(OBJDIR)\Entities_Entity.o: \ 
$(SRCDIR)\Entities\Entity.cpp $(SRCDIR)\Entities\Entity.h \ 
$(SRCDIR)\Graphics\RenderingScreen.h $(SRCDIR)\Core\InputState.h \ 
$(SRCDIR)\Maps\Map.h 
    $(COMPILE) 

$(OBJDIR)\Entities_Player.o: \ 
$(SRCDIR)\Entities\Player.cpp $(SRCDIR)\Entities\Player.h \ 
$(SRCDIR)\Maps\Map.h $(SRCDIR)\Graphics\RenderingScreen.h \ 
$(SRCDIR)\Core\InputState.h 
    $(COMIPLE) 

$(OBJDIR)\Entities_MovingEntity.o: \ 
$(SRCDIR)\Entities\MovingEntity.cpp $(SRCDIR)\Entities\MovingEntity.h \ 
$(SRCDIR)\Graphics\RenderingScreen.h $(SRCDIR)\Core\InputState.h \ 
$(SRCDIR)\Entities\Entity.h $(SRCDIR)\Maps\Map.h 
    $(COMPILE) 

clear: 
    del /Q $(OBJDIR)\* $(BINDIR)\* 

variables: 
    echo $(SOURCES) 
    echo $(OBJECTS) 
    echo $(SRCDIR) 
    echo $(OBJDIR) 
    echo $(BINDIR) 
    echo $(EXECUTABLE) 
    echo $(COMPILE) 
    echo $(LINK) 

makefolders: 
    if not exist $(SRCDIR) mkdir $(SRCDIR) 
    if not exist $(OBJDIR) mkdir $(OBJDIR) 
    if not exist $(BINDIR) mkdir $(BINDIR) 

我的問題是,使用的mingw32-化妝的時候,它會創建的所有文件,除了OBJ \ Entities_Player.o,它說的是始終保持日期。下面是一些命令行輸出的(我已經改名的mingw32-make來作出易用性):

C:\Users\Mike\Documents\CodeProjects\Snow\trunk>make clear 
del /Q obj\* bin\* 

C:\Users\Mike\Documents\CodeProjects\Snow\trunk>dir obj 
Volume in drive C has no label. 
Volume Serial Number is D29B-6E0B 

Directory of C:\Users\Mike\Documents\CodeProjects\Snow\trunk\obj 

03/13/2013 11:33 AM <DIR>   . 
03/13/2013 11:33 AM <DIR>   .. 
       0 File(s)    0 bytes 
       2 Dir(s) 80,363,814,912 bytes free 

C:\Users\Mike\Documents\CodeProjects\Snow\trunk>make 
g++ -c -Wall -o obj\Core_SnowApp.o src\Core\SnowApp.cpp 
g++ -c -Wall -o obj\Core_SnowApp_Render.o src\Core\SnowApp_Render.cpp 
g++ -c -Wall -o obj\Core_SnowApp_Tick.o src\Core\SnowApp_Tick.cpp 
g++ -c -Wall -o obj\Core_InputState.o src\Core\InputState.cpp 
g++ -c -Wall -o obj\Graphics_RenderingScreen.o src\Graphics\RenderingScreen.cpp 
g++ -c -Wall -o obj\Graphics_SpriteSheet.o src\Graphics\SpriteSheet.cpp 
g++ -c -Wall -o obj\Maps_Map.o src\Maps\Map.cpp 
g++ -c -Wall -o obj\Entities_Entity.o src\Entities\Entity.cpp 
g++ -c -Wall -o obj\Entities_MovingEntity.o src\Entities\MovingEntity.cpp 
g++ -o bin\snow.exe obj\Core_SnowApp.o obj\Core_SnowApp_Render.o obj\Core_SnowAp 
p_Tick.o obj\Core_InputState.o obj\Graphics_RenderingScreen.o obj\Graphics_Sprit 
eSheet.o obj\Maps_Map.o obj\Entities_Entity.o obj\Entities_MovingEntity.o obj\En 
tities_Player.o -lmingw32 -lSDLmain -lSDL 
g++: error: obj\Entities_Player.o: No such file or directory 
make: *** [bin\snow.exe] Error 1 

C:\Users\Mike\Documents\CodeProjects\Snow\trunk>make obj\Entities_Player.o 
make: `obj\Entities_Player.o' is up to date. 

C:\Users\Mike\Documents\CodeProjects\Snow\trunk>dir obj\Entities_Player.o 
Volume in drive C has no label. 
Volume Serial Number is D29B-6E0B 

Directory of C:\Users\Mike\Documents\CodeProjects\Snow\trunk\obj 

File Not Found 

C:\Users\Mike\Documents\CodeProjects\Snow\trunk> 

首先,我清空的obj目錄,並表明它是空的。然後我打電話給make,對於我在SOURCES變量中的過去的文件,將所有.cpp文件構建到駐留在obj中的.o文件中。這一步跳過obj \ Entities_Player.o,所以我們自己檢查它,發現它是最新的,但沒有找到它。我們再次檢查是否.o文件在目錄中,而不是。對於它的價值,如果我使用手動g ++以及通過$(編譯)由專人專線去編譯它,我最終能夠對文件進行編譯,然後進行項目:

C:\Users\Mike\Documents\CodeProjects\Snow\trunk>g++ -c -Wall -o obj\Entities_Pla 
yer.o src\Entities\Player.cpp 

C:\Users\Mike\Documents\CodeProjects\Snow\trunk>make 
g++ -o bin\snow.exe obj\Core_SnowApp.o obj\Core_SnowApp_Render.o obj\Core_SnowAp 
p_Tick.o obj\Core_InputState.o obj\Graphics_RenderingScreen.o obj\Graphics_Sprit 
eSheet.o obj\Maps_Map.o obj\Entities_Entity.o obj\Entities_MovingEntity.o obj\En 
tities_Player.o -lmingw32 -lSDLmain -lSDL 

C:\Users\Mike\Documents\CodeProjects\Snow\trunk> 

也許我只是需要一個新的眼睛,可能有一些關於讓我不知道的東西。如果你能想到任何事情,我會非常感謝你的幫助。

回答

2

製作文件中存在拼寫錯誤。爲玩家構建命令是:

$(COMIPLE) 

當它應該是:

$(COMPILE) 

$(COMIPLE)擴展爲空,所以不執行任何操作。

+0

而新鮮的眼睛是勝利者!謝謝! – mikeastarb 2013-03-13 19:44:01

+0

始終用'--warn-undefined-variables'參數運行make! – bobbogo 2013-03-14 14:44:48

相關問題