这可能是一个非常基本的但我需要在函数中调用一个函数,但我无法弄清楚:
chmod-prod:
chown git:git-R ./
composer-dev:
[who do I how chmod-prod: within here]
任何帮助将不胜感激
答案 0 :(得分:4)
请注意,chmod-prod
和composer-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