我正在尝试创建一个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版本。 谁能告诉我我在做什么错(或者这是一个错误)?
答案 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