>  기사  >  백엔드 개발  >  GNU Make는 디렉토리 구조 전반에 걸쳐 유사한 규칙을 사용하여 수많은 실행 파일을 효율적으로 빌드하여 기본 디렉토리와 개별 프로젝트 폴더 모두에서 컴파일할 수 있습니까?

GNU Make는 디렉토리 구조 전반에 걸쳐 유사한 규칙을 사용하여 수많은 실행 파일을 효율적으로 빌드하여 기본 디렉토리와 개별 프로젝트 폴더 모두에서 컴파일할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-27 16:07:02878검색

Can GNU Make streamline building numerous executables with similar rules across a directory structure, allowing compilation from both the main directory and individual project folders?

GNU Make를 사용하여 유사한 규칙으로 여러 실행 파일 빌드

질문:

GNU Make를 만들 수 있나요? 디렉토리 구조에서 유사한 규칙을 사용하여 여러 실행 파일을 구축하는 것을 용이하게 하여 기본 디렉토리와 개별 프로젝트 디렉토리 모두에서 컴파일할 수 있습니까?

답변:

예, GNU Make는 처리할 수 있습니다. 간결하고 효율적인 접근 방식으로 이 작업을 수행합니다. 다음은 원하는 기능을 구현하는 두 개의 makefile입니다:

project.mk:

all :
% : forward_ # build any target by forwarding to the main makefile
    $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@
.PHONY : forward_

Makefile:

# one directory per project, one executable per directory
project_dirs := $(shell find * -maxdepth 0 -type d )

# executables are named after its directory and go into the same directory
exes := $(foreach dir,${project_dirs},${dir}/${dir})

all : ${exes}

#  the rules

.SECONDEXPANSION:

objects = $(patsubst %.cpp,%.o,$(wildcard $(dir )*.cpp))

# link
${exes} : % : $$(call objects,$$*) Makefile
    g++ -o $@ $(filter-out Makefile,$^) ${LDFLAGS} ${LDLIBS}

# compile .o and generate dependencies
%.o : %.cpp Makefile
    g++ -c -o $@ -Wall -Wextra ${CPPFLAGS} ${CXXFLAGS} -MD -MP -MF ${@:.o=.d} $<

.PHONY: clean

clean :
    rm -f $(foreach exe,${exes},$(call objects,${exe})) $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d)) ${exes}

# include auto-generated dependency files
-include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))

사용법:

  • 각 프로젝트 디렉터리에 project.mk에 대한 Makefile이라는 심볼릭 링크를 만듭니다.
  • 특정 프로젝트를 빌드하려면 프로젝트 디렉터리로 이동하세요. 그리고 make를 실행하세요.
  • 모든 프로젝트를 빌드하려면 기본 디렉터리(all_lessons)에서 make를 실행하세요.
  • 특정 프로젝트를 정리하려면 프로젝트 디렉터리에서 make clean을 실행하세요.
  • 모든 프로젝트를 정리하려면 기본 디렉터리에서 make clean을 실행하세요.

장점:

  • 구현이 쉽고 지정된 요구 사항에 적합합니다.
  • 메인 디렉터리와 프로젝트 디렉터리 모두에서 빌드 및 정리를 지원합니다.
  • 자동으로 종속성을 생성하고 완전히 병렬화 가능합니다.

위 내용은 GNU Make는 디렉토리 구조 전반에 걸쳐 유사한 규칙을 사용하여 수많은 실행 파일을 효율적으로 빌드하여 기본 디렉토리와 개별 프로젝트 폴더 모두에서 컴파일할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.