필자는 메이크 파일에서 자동 의존성을 사용하려고 잠시 동안 노력해 왔지만, 단지 프로젝트를 퍼팅하는 것보다 더 복잡한 구조를 사용하기 때문에 많은 노력이 필요하다. 루트 폴더의 모든 파일 내 메이크 파일에이 코드 조각을 사용하려고했습니다메이크 파일과 프로젝트 디렉토리 구조의 자동 의존성
:
OBJECTS_DIR = obj/
SRCS_DIR = src/
#source files list, i.e : src/foo.cpp src/bar/foo2.cpp
SOURCES = $(shell find $(SRCS_DIR) -name \*.cpp | xargs -d '\n')
#object files list, i.e : obj/foo.o obj/foo2.o
OBJECTS = $(addprefix $(OBJECTS_DIR), $(notdir $(SOURCES:.cpp=.o)))
DEPS = $(OBJECTS_DIR)make.dep
myproject : $(OBJECTS)
$(CC) $(CFLAGS) $(LDFLAGS) -o [email protected] $^
$(OBJECTS) : $(SOURCES)
$(CC) $(CFLAGS) $(LDFLAGS) -o [email protected] -c $(filter %/$(notdir $(@:.o=.cpp)), $(SOURCES))
$(DEPS): $(SOURCES)
$(CC) -MM $(SOURCES) > $(DEPS)
-include $(DEPS)
all : myproject
clean :
@-rm -f $(RELEASE_DIR)* $(OBJECTS_DIR)*
나는 OBJ/make.dep 파일의 모든 종속성을 저장하고 싶습니다. 이것은 (여기 푸에서는 foo2 포함) 나에게 다음과 같은 출력을 제공합니다
foo2.o: src/bar/foo2.cpp src/bar/headers/foo2.h
foo.o: src/foo.cpp src/bar/headers/foo2.h
나는 다음과 같은 출력을하기 위해 오브젝트 파일의 각 이름을 변경하고 싶습니다 : OBJ/foo2.o : SRC/바 /에서는 foo2 .cpp src/bar/headers/foo2.h obj/foo.o : src/foo.cpp src/bar/headers/foo2.h
결과가없는 -MT 옵션을 사용해 보았습니다. 또한, -include $ (DEPS)는 내가 만든 종속성을 포함 할 정도로 충분합니까? make.dep 파일에 기록 된 행에 의해 OBJECT 규칙에서 $ (filter %/$ (notdir $ (@ :. o = .cpp)), $ (SOURCES)를 대체하지 않아야합니까?
통찰력을 미리 주셔서 감사합니다. 다른 방법으로 메이크 파일을 개선 할 수 있는지 알려주세요.
모든 종속성을 포함하는 하나의 파일 만 만들 것입니다. 영감으로 [이 링크] (http://stackoverflow.com/questions/1979912/problem-generating-dependencies-in-makefile-using-mm)를 사용했습니다. – Aserre
댓글을 달기 위해 업데이트되었습니다. – ThePosey
감사합니다. 나는 1 개의 큰 파일이 더 빨랐을 것이라고 생각했다. .. – Aserre