C/C++의 프로젝트에 대한 메이크 파일에 대한 종속성 생성
종속성이 깨진 메이크 파일이 있는 프로젝트가 있습니다.각 소스 파일을 손으로 검사하거나 손으로 쓴 펄 스크립트를 사용하는 것 외에 makefile에서 사용할 수 있는 프로젝트에 대한 종속성 목록을 생성하는 가장 잘 알려진 방법이 있습니까?
그렇고 말고요. g++ -MM <your file>
GMake 호환 가능한 종속성 목록을 생성합니다.저는 다음과 같은 것을 사용합니다.
# Add .d to Make's recognized suffixes.
SUFFIXES += .d
#We don't need to clean up when we're making these targets
NODEPS:=clean tags svn
#Find all the C++ files in the src/ directory
SOURCES:=$(shell find src/ -name "*.cpp")
#These are the dependency files, which make will clean up after it creates them
DEPFILES:=$(patsubst %.cpp,%.d,$(SOURCES))
#Don't create dependencies when we're cleaning, for instance
ifeq (0, $(words $(findstring $(MAKECMDGOALS), $(NODEPS))))
#Chances are, these files don't exist. GMake will create them and
#clean up automatically afterwards
-include $(DEPFILES)
endif
#This is the rule for creating the dependency files
src/%.d: src/%.cpp
$(CXX) $(CXXFLAGS) -MM -MT '$(patsubst src/%.cpp,obj/%.o,$<)' $< -MF $@
#This rule does the compilation
obj/%.o: src/%.cpp src/%.d src/%.h
@$(MKDIR) $(dir $@)
$(CXX) $(CXXFLAGS) -o $@ -c $<
참고: $(CXX)
/gcc
명령 앞에는 하드 탭이 있어야 합니다.
이렇게 하면 변경된 각 파일에 대한 종속성을 자동으로 생성하고 사용자가 설정한 규칙에 따라 파일을 컴파일할 수 있습니다.이를 통해 새 파일을 에 덤프할 수 있습니다.src/
자동으로 컴파일되도록 설정할 수 있습니다. 종속성 및 모든 항목.
특히 이 부분을 읽어보니, 합리적으로 최신 버전의 gcc/g++만 있으면 훨씬 더 쉬운 해결책이 있다고 생각합니다.추가만 하면 됩니다.-MMD
당신에게CFLAGS
변수를 정의합니다.OBJS
모든 개체 파일을 표시하고 다음 작업을 수행합니다.
-include $(OBJS:%.o=%.d)
그러면 효율적이고 간단한 자동 종속성 구축 시스템을 모두 얻을 수 있습니다.
GNU C 전처리기 cpp에는 포함 패턴을 기반으로 적합한 종속성 집합을 생성하는 -MM 옵션이 있습니다.
메이크 파일에 이것을 추가하면 잘 작동합니다.
-include Makefile.deps
Makefile.deps:
$(CC) $(CFLAGS) -MM *.[ch] > Makefile.deps
Digital Mars C/C++ 컴파일러는 makedep 도구와 함께 제공됩니다.
언급URL : https://stackoverflow.com/questions/313778/generate-dependencies-for-a-makefile-for-a-project-in-c-c
'programing' 카테고리의 다른 글
AWS boto와 boto3의 차이점은 무엇입니까? (0) | 2023.06.22 |
---|---|
R 함수에서 선택적 인수를 지정하는 "올바른" 방법 (0) | 2023.06.22 |
(또는 기타 및 기타) 및 (및 기타) - 언제 사용해야 합니까? (0) | 2023.06.22 |
Angular2 - 데바운스 시간이 있는 테스트 호출 (0) | 2023.06.22 |
MongoDB 특정 배열 값 바꾸기 (0) | 2023.06.22 |