我有一个源代码文件夹结构如下
src
|-tests
|-abc
我在src
中有一个makefile,其中有一个名为tests
的目标。 tests
有自己的makefile
,用于将源代码编译成二进制文件。(多个目标)。所有这些都由测试目录中的Makefile管理。
我的src
制作文件具有以下目标。
all: main tests
main: $(DEPENDENCY IN SRC and ABC)
command
tests: ??
make -C tests
我可以为主Makefile中的测试目标指定什么依赖性..我不希望这个Makefile知道tests文件夹中的源文件。
答案 0 :(得分:1)
我不希望这个Makefile知道tests文件夹中的源文件。
也许,但你可能想重新考虑一下。彼得·米勒的Recursive Make Considered Harmful提出了一个强有力的理由,即你需要或想要一个Makefile。很久以前它改变了我的想法。
答案 1 :(得分:0)
all: main tests
main: $(DEPENDENCY IN SRC and ABC)
command
tests:
$(MAKE) -C tests
这将无条件地在其私有子目录上调用make测试。请注意,使用特殊的$(MAKE)变量有助于传播命令行参数并减少开销。
答案 2 :(得分:0)
只需将目标声明为PHONY
,即make
不会检查任何生成的文件。相反,它只是始终执行规则,让次要调用make
来决定需要构建的内容。
想一想:如果你有一个aditional文件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
的程序集。