makefile 在函数内部调用函数

Oli*_*ton 0 makefile

这可能是一个非常基本的问题,但我需要在函数中调用函数,但我无法弄清楚:

chmod-prod:

    chown git:git-R ./

composer-dev:

    [who do I how chmod-prod: within here]
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激

Pet*_*rSW 5

请注意,chmod-prodcomposer-dev在 make 术语中被称为目标。

使用目标

如果 need 的结果chmod-prod发生在“配方”的其余部分之前,那么composer-devmake 中最自然的方式是将其添加为依赖项。

composer-dev: chmod-prod
    [the rest of composer-dev recipe]
Run Code Online (Sandbox Code Playgroud)

鉴于这两个目标不会导致创建具有其名称的文件,最好将它们声明为.PHONY

.PHONY: chmod-prod
.PHONY: composer-dev
Run Code Online (Sandbox Code Playgroud)

这可以确保如果有人添加同名文件,目标不会受到影响。

使用变量

另一种方法是将命令存储在变量中:

chmod_prod_cmd:=chown git:git-R ./
Run Code Online (Sandbox Code Playgroud)

然后可以在两个目标的配方中使用它:

composer-dev:
    $(chmod_prod_cmd)

composer-dev:
    $(chmod_prod_cmd)
    [presumably some more recipe]
Run Code Online (Sandbox Code Playgroud)

罐装多行配方

如果您想要重用的配方位涉及多行,那么您将需要使用define指令而不是普通的变量赋值:

define chmod_prod_cmd
    echo Doing something
    chown git:git-R ./
endef
Run Code Online (Sandbox Code Playgroud)