首页 > 后端开发 > C++ > 如何使用 GNU Make 从不同目录高效构建具有相似规则的多个可执行文件?

如何使用 GNU Make 从不同目录高效构建具有相似规则的多个可执行文件?

Linda Hamilton
发布: 2024-10-29 08:42:03
原创
739 人浏览过

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 自动检测和更新依赖项,确保仅构建必要的目标。

用法

从个人构建项目目录中,创建指向 project.mk 的符号链接作为该目录中的 Makefile。从 all_lessons 目录构建或清理将处理所有项目,而从项目目录执行此操作只会影响该项目。

此方法提供了一种干净灵活的方法,可以从不同目录中构建具有类似规则的多个可执行文件。

以上是如何使用 GNU Make 从不同目录高效构建具有相似规则的多个可执行文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板