makefile调用函数内部的函数

时间:2015-06-22 16:25:47

标签: makefile

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

chmod-prod:

    chown git:git-R ./

composer-dev:

    [who do I how chmod-prod: within here]

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:4)

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

使用目标

如果chmod-prod的结果需要在composer-dev中的“食谱”的其余部分之前发生,则make中最自然的方式是将其添加为依赖项。

composer-dev: chmod-prod
    [the rest of composer-dev recipe]

鉴于这两个目标都没有导致创建一个带有名称的文件,最好将它们声明为.PHONY

.PHONY: chmod-prod
.PHONY: composer-dev

这确保了如果有人添加具有相同名称的文件,目标将不会受到影响。

使用变量

另一条路线是将命令存储在变量中:

chmod_prod_cmd:=chown git:git-R ./

然后可以在两个目标的食谱中使用:

composer-dev:
    $(chmod_prod_cmd)

composer-dev:
    $(chmod_prod_cmd)
    [presumably some more recipe]

制作多行食谱

如果要重用的配方位涉及多行,则需要使用define指令而不是正常的变量赋值:

define chmod_prod_cmd
    echo Doing something
    chown git:git-R ./
endef

答案 1 :(得分:2)

假设那些需要成为目标(并按照这种方式排序),那么PeterSW就有了正确的答案。

如果他们需要在composer-dev食谱的主体 中进行更细粒度的测序,那么你可以随时再次运行make(例如$(MAKE) chmod-prod),但我不建议这种结构的makefile,因为它很昂贵(至少可以说)。

如果chmod-prod的配方主体实际上只是一个简单的单个(或一系列)shell命令(不需要手动外部运行,即make chmod-prod),那就说了一个make变量/ define而不是目标。

像这样的东西

chmod-prod := chown git:git-R ./

或者

define chmod-prod
    chown git:git-R ./
endef

并像这样使用

composer-dev:
        some_command
        $(chmod-prod)
        other_command