首页 > 解决方案 > 下面的makefile是什么意思?

问题描述

这是Makefile如下,我想问一下step1和2会分别做什么?谢谢

DIRS = modules utils library

BUILDDIRS = $(DIRS:%=build-%)                           step1

all: $(BUILDDIRS)

$(BUILDDIRS):
        $(MAKE) -C $(@:build-%=%)                        step2

标签: makefile

解决方案


这看起来像一个调度 Makefile。它的工作是公开构建目标build-modulesbuild-utils并且build-library. 如果没有给它任何目标,它会构建all依赖于所有这些的目标。例如,我们还可以考虑make build-utils直接调用。

每个build-<whatever>对应一个<whatever>没有build-前缀的目录。

例如要更新目标build-utils,操作是递归调用makewith-C utils step2作为参数:切换到utils目录并在Makefile那里查找,调用它的step2目标。

Makefile有一个缺陷:目标allbuild-<dir>目标都是假的,但没有.PHONY:声明它们。这意味着make它将探测文件系统,查找名为all和的文件build-modules,等等。如果您使用这些名称创建文件,例如 bytouch build-modulestouch allMakefile则会出现故障。


推荐阅读