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

如何使用 GNU Make 构建具有相似规则的多个可执行文件?

Linda Hamilton
发布: 2024-10-28 14:56:02
原创
963 人浏览过

 How to Build Multiple Executables with Similar Rules Using GNU Make?

使用 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 )*.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
登录后复制

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

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