> 백엔드 개발 > C++ > GNU Make를 사용하여 서로 다른 디렉토리의 유사한 규칙을 사용하여 여러 실행 파일을 효율적으로 빌드할 수 있습니까?

GNU Make를 사용하여 서로 다른 디렉토리의 유사한 규칙을 사용하여 여러 실행 파일을 효율적으로 빌드할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-10-29 08:42:03
원래의
750명이 탐색했습니다.

How can GNU Make be used to efficiently build multiple executables with similar rules from different directories?

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

Scons의 대안으로 GNU Make는 작업에 효율적인 솔루션이 될 수 있습니다. GNU Make를 사용하면 종속성 해결 시스템을 통해 유연한 빌드 프로세스를 정의할 수 있습니다.

GNU Make 접근 방식

위에서 빌드하고 정리할 수 있는 두 개의 makefile을 제공합니다. -레벨 디렉터리(all_lessons) 및 개별 프로젝트 디렉터리:

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))
로그인 후 복사

장점

  • 단순성: GNU Make는 초보자라도 간단하고 이해하기 쉽습니다.
  • 확장성: Makefile은 사용자 정의 대상 및 규칙을 사용하여 쉽게 확장할 수 있습니다.
  • 병렬화 가능: GNU Make는 여러 대상을 동시에 빌드할 수 있으므로 대규모 프로젝트에 효율적입니다.
  • 자동 종속성 추적: Make는 종속성을 자동으로 감지하고 업데이트하여 필요한 대상만 빌드되도록 합니다.

사용

개별적으로 빌드하려면 프로젝트 디렉토리에서 해당 디렉토리에 Makefile로 project.mk에 대한 심볼릭 링크를 만듭니다. all_lessons 디렉토리에서 빌드하거나 정리하면 모든 프로젝트가 처리되지만, 프로젝트 디렉토리에서 빌드하거나 정리하면 해당 프로젝트에만 영향을 미칩니다.

이 접근 방식은 다양한 디렉토리에서 유사한 규칙을 사용하여 여러 실행 파일을 빌드하는 깔끔하고 유연한 방법을 제공합니다.

위 내용은 GNU Make를 사용하여 서로 다른 디렉토리의 유사한 규칙을 사용하여 여러 실행 파일을 효율적으로 빌드할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿