在定义配方的先决条件中添加额外的换行符
Make extra newline in prerequisite in define recipe
我正在尝试创建一个 Makefile,它使用使用 define 语法创建的配方。但是,我 运行 遇到一个问题,Make 认为最后一个先决条件附加了换行符,导致 "no rule found" 错误。下面给出了一个最小的工作示例,问题是通过尝试制作 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 版本。
谁能告诉我我做错了什么(或者这是一个错误)?
您在这里要做的是扩展变量 FIZZ
以注入
将目标foo/bar
(其先决条件和配方)定义到
扩展的生成文件。 $(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
我正在尝试创建一个 Makefile,它使用使用 define 语法创建的配方。但是,我 运行 遇到一个问题,Make 认为最后一个先决条件附加了换行符,导致 "no rule found" 错误。下面给出了一个最小的工作示例,问题是通过尝试制作 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 版本。 谁能告诉我我做错了什么(或者这是一个错误)?
您在这里要做的是扩展变量 FIZZ
以注入
将目标foo/bar
(其先决条件和配方)定义到
扩展的生成文件。 $(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