在定义配方的前提条件中添加额外的换行符

时间:2018-10-25 08:30:13

标签: makefile gnu-make

我正在尝试创建一个Makefile,该Makefile使用使用define语法创建的配方。但是,我遇到了一个问题,其中Make认为最后一个必备条件附加了换行符,从而导致“未找到规则”错误。下面给出一个最小的工作示例,该问题是通过尝试使foo / bar目标触发的。

foo:
    mkdir foo

define FIZZ
foo/bar: foo
    touch foo/bar
endef

$(call FIZZ)

确切的错误消息是

make: *** No rule to make target 'foo
', needed by 'foo/bar'. Stop.

我尝试了GNU Make的4.1和4.2.1版本。 谁能告诉我我在做什么错(或者这是一个错误)?

1 个答案:

答案 0 :(得分:0)

您要在此处执行的操作是展开变量FIZZ以注入 目标foo/bar的定义(先决条件和配方) 扩展的makefile。 $(call FIZZ)并非用于此目的的工具:

$(call variable,param,param,...)
如果参数包含嵌入式空格,则

的行为可能会令人惊讶。你要 8.9 The eval Function, 如:

制作文件

foo:
    mkdir foo

define FIZZ
foo/bar: foo
    touch foo/bar
endef

$(eval $(FIZZ))

那么您会得到:

$ make foo/bar
mkdir foo
touch foo/bar