使用 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中文网其他相关文章!