在子目录中调用 makefile
Calling makefile in a subdirectory
我的源代码文件夹结构如下
src
|-tests
|-abc
我在 src
中有一个 makefile,它有一个名为 tests
的目标。 tests
有自己的 makefile
用于将源代码编译成二进制文件。(多个目标)。所有这些都由测试目录中的 Makefile 管理。
我的 src
make 文件具有以下目标。
all: main tests
main: $(DEPENDENCY IN SRC and ABC)
command
tests: ??
make -C tests
我可以为主 Makefile 中的测试目标指定什么依赖关系。我不希望此 Makefile 知道测试文件夹中的源文件。
all: main tests
main: $(DEPENDENCY IN SRC and ABC)
command
tests:
$(MAKE) -C tests
这将无条件地调用其私有子目录上的 make of 测试。请注意,使用特殊的 $(MAKE) 变量有助于传播命令行参数并减少开销。
只需将目标声明为 PHONY
,这意味着 make
不会检查任何生成的文件。相反,它只是 always 执行规则,让二次调用 make
来决定需要构建什么。
想一想:如果您有一个附加文件 src/tests
会怎样? make
会注意到该文件已经存在,并且由于没有指明先决条件,它会决定不创建该文件。阻止您的规则 tests
被执行。
all: main tests
main: $(DEPENDENCY IN SRC and ABC)
# Recipes (That is the word to describe commands in a make rule)
.PHONY: tests
tests:
$(MAKE) -C tests
同时添加 Alex 的回答:使用 $(MAKE)
是一个很好的做法。并允许您的 makefile 独立于 make
程序的名称工作。假设您有一个分布,其中程序称为 xyz-make
.
I don't want this Makefile to be aware of the source files in the tests folder.
也许可以,但您可能需要重新考虑。 Peter Miller 的 Recursive Make Considered Harmful 有力地证明了一个 Makefile 就是您所需要或想要的。很久以前就改变了我的想法。
我的源代码文件夹结构如下
src
|-tests
|-abc
我在 src
中有一个 makefile,它有一个名为 tests
的目标。 tests
有自己的 makefile
用于将源代码编译成二进制文件。(多个目标)。所有这些都由测试目录中的 Makefile 管理。
我的 src
make 文件具有以下目标。
all: main tests
main: $(DEPENDENCY IN SRC and ABC)
command
tests: ??
make -C tests
我可以为主 Makefile 中的测试目标指定什么依赖关系。我不希望此 Makefile 知道测试文件夹中的源文件。
all: main tests
main: $(DEPENDENCY IN SRC and ABC)
command
tests:
$(MAKE) -C tests
这将无条件地调用其私有子目录上的 make of 测试。请注意,使用特殊的 $(MAKE) 变量有助于传播命令行参数并减少开销。
只需将目标声明为 PHONY
,这意味着 make
不会检查任何生成的文件。相反,它只是 always 执行规则,让二次调用 make
来决定需要构建什么。
想一想:如果您有一个附加文件 src/tests
会怎样? make
会注意到该文件已经存在,并且由于没有指明先决条件,它会决定不创建该文件。阻止您的规则 tests
被执行。
all: main tests
main: $(DEPENDENCY IN SRC and ABC)
# Recipes (That is the word to describe commands in a make rule)
.PHONY: tests
tests:
$(MAKE) -C tests
同时添加 Alex 的回答:使用 $(MAKE)
是一个很好的做法。并允许您的 makefile 独立于 make
程序的名称工作。假设您有一个分布,其中程序称为 xyz-make
.
I don't want this Makefile to be aware of the source files in the tests folder.
也许可以,但您可能需要重新考虑。 Peter Miller 的 Recursive Make Considered Harmful 有力地证明了一个 Makefile 就是您所需要或想要的。很久以前就改变了我的想法。