GNU Make를 사용하여 유사한 규칙으로 여러 실행 파일 빌드
Scons는 유능한 빌드 도구이지만 원하는 기능을 구현하는 것은 어려울 수 있습니다. 보다 간단한 접근 방식은 최상위 및 개별 프로젝트 디렉토리 모두에서 쉽게 빌드하고 정리할 수 있는 GNU Make를 활용하는 것입니다.
Makefile 설정
제공된 makefile all_lessons 디렉터리와 개별 프로젝트 디렉터리 모두에서 빌드 및 정리를 활성화합니다. 각 프로젝트의 실행 파일 이름은 해당 디렉터리를 따라 지정됩니다.
프로젝트 구조
이를 달성하려면 제공된 예제와 유사한 프로젝트 구조를 설정해야 합니다.
all_lessons/ helloworld/ lesson.cpp main.cpp even_or_odd/ lesson.cpp main.cpp calculator/ lesson.cpp user_created_add.cpp main.cpp
Makefile 콘텐츠
project.mk
all : % : forward_ # build any target by forwarding to the main makefile $(MAKE) -C .. project_dirs=$(notdir ${CURDIR}) $@ .PHONY : forward_
Makefile
# project configuration project_dirs := $(shell find * -maxdepth 0 -type d ) exes := $(foreach dir,${project_dirs},${dir}/${dir}) all : ${exes} # rules .SECONDEXPANSION: objects = $(patsubst %.cpp,%.o,$(wildcard $(dir ${1})*.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 dependency files -include $(foreach dir,${project_dirs},$(wildcard ${dir}/*.d))
사용
개별 빌드 프로젝트 디렉토리
[project_directory]$ ln -s ../project.mk Makefile # create a symlink [project_directory]$ make
최상위 디렉토리에서 빌드
[all_lessons]$ make
개별 프로젝트 디렉토리 정리
[project_directory]$ cd .. [all_lessons]$ make clean
모든 프로젝트 정리
[all_lessons]$ make clean
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3