使用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))
優點
用法
從個人建置專案目錄中,建立指向 project.mk 的符號連結作為該目錄中的 Makefile。從 all_lessons 目錄建置或清理將處理所有項目,而從項目目錄執行此操作只會影響該項目。 此方法提供了一種乾淨且靈活的方法,可以從不同目錄中建立具有類似規則的多個可執行檔。以上是如何使用 GNU Make 從不同目錄高效建立具有相似規則的多個可執行檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!