programing

C/C++의 프로젝트에 대한 메이크 파일에 대한 종속성 생성

padding 2023. 6. 22. 21:35
반응형

C/C++의 프로젝트에 대한 메이크 파일에 대한 종속성 생성

종속성이 깨진 메이크 파일이 있는 프로젝트가 있습니다.각 소스 파일을 손으로 검사하거나 손으로 쓴 펄 스크립트를 사용하는 것 외에 makefile에서 사용할 수 있는 프로젝트에 대한 종속성 목록을 생성하는 가장 잘 알려진 방법이 있습니까?

GNU make의 문서는 좋은 해결책을 제공합니다.

그렇고 말고요. 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

반응형