0
我的簡單的小makefile展現了我無法理解的行爲。如果我觸摸除Dictionary.cpp以外的任何源文件,則不會構建任何目標,並且如果我觸摸Dictionary.cpp,則它將編譯但不鏈接。源文件在src/object(.o)和依賴關係(.d)中,並且二進制文件進入bin/唉,makefile不會正確地依賴關係
如果我rm obj/*那麼一切都會生成,但時間戳似乎不是被拾起。誰能告訴我我要去哪裏?
的.d文件似乎被正確創建,這裏的Dictionary.d:
obj/Dictionary.o: src/Dictionary.cpp src/pch.h src/Types.h src/Util.h \
src/Refcount.h src/Dictionary.h
src/Dictionary.cpp:
src/pch.h:
src/Types.h:
src/Util.h:
src/Refcount.h:
src/Dictionary.h:
它看起來正確的給我。這裏的生成文件:
sources = Dictionary.cpp \
Util.cpp \
Tile.cpp \
Board.cpp \
Vec2.cpp \
Letter.cpp \
Random.cpp \
Server.cpp \
main.cpp
objects = $(patsubst %.cpp,obj/%.o,$(sources))
depends = $(patsubst %.cpp,obj/%.d,$(sources))
CXX = g++
CPPFLAGS = -Isrc -std=c++0x
CXXFLAGS = -c
-include $(depends)
bin/dictionary: $(objects)
@echo Link...
$(CXX) $(CPPFLAGS) $(objects) -o bin/dictionary -lrt
obj/%.o: src/%.cpp
@echo [$*]
@$(CXX) $(CPPFLAGS) $(CXXFLAGS) src/$*.cpp -o obj/$*.o
@$(CXX) $(CPPFLAGS) -MM src/$*.cpp -MF obj/$*.d
@mv -f obj/$*.d obj/$*.d.tmp
@sed -e 's|.*:|obj/$*.o:|' < obj/$*.d.tmp > obj/$*.d
@sed -e 's/.*://' -e 's/\\$$//' < obj/$*.d.tmp | fmt -1 | sed -e 's/^ *//' -e ' s/$$/:/' >> obj/$*.d
@rm -f obj/$*.d.tmp
Doh!當然,非常感謝。 – 2013-05-04 13:28:51