내 간단한 작은 메이크 파일이 내가 이해할 수없는 동작을 보여주고 있습니다. Dictionary.cpp를 제외한 소스 파일을 건 드리면 타겟이 만들어지지 않고 Dictionary.cpp를 터치하면 컴파일되지만 링크는되지 않습니다. 소스 파일은 src/object (.o)에 있고 의존성 (.d)은 obj /에 있고 바이너리는 bin/아아, 메이크 파일이 종속성을 올바르게 선택하지 않습니다.
에 있습니다.만약 내가 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! 물론 고마워요. –