使用 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