-1

過去30分間、同様の問題を抱えている人を探してみましたが、ファイルがまったく存在しないのに、ファイルが最新であることを示している理由については何も見つかりません.

現在のメイクファイルは次のとおりです。

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) $@ $<
LINK=$(CC) $(LFLAGS) $@ $^ $(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-make を使用すると、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 ディレクトリを空にして、それが空であることを示します。次に、SOURCES 変数内の過去のファイルについて、すべての .cpp ファイルを obj にある .o ファイルにビルドする make を呼び出します。このステップは obj\Entities_Player.o をスキップするので、それ自体をチェックして最新であることを確認しますが、見つかりませんでした。.o ファイルがディレクトリにあるかどうかを再度確認しますが、そうではありません。価値があるのは、g ++を使用して手動でコンパイルし、 $(COMPILE) 行を手動で実行すると、最終的にファイルをコンパイルしてプロジェクトを作成できることです。

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>

多分私はそれに新鮮な目を向ける必要があるだけかもしれません。何か思いつくことがあれば、本当に助かります。

4

1 に答える 1

2

makeファイルにタイプミスがあります。Playerのビルドコマンドは次のとおりです。

 $(COMIPLE)

いつあるべきか:

$(COMPILE)

$(COMIPLE)何も評価されないため、アクションは実行されません。

于 2013-03-13T15:54:35.710 に答える