我需要在Makefile中install
和install-homebrew
目标。他们应该以相同的方式安装所有文件,除了主目录 - Homebrew的目标应该使用模式750而不是默认的755。
有一个主要的install-files
目标是很自然的,它包含除上述install -c -d ..
之外的所有内容。但是如何构造 Makefile,以便在 install
和 install-homebrew
结束时调用规则 install-files
?
如果这两个目标真的做完全相同的事情,那么在我看来,你正在寻找类似的东西
.PHONY: install install-homebrew
install: mode := 755
install-homebrew: mode := 750
install install-homebrew:
# execute whatever using $(mode)
您可以使用中间规则:
install: do-install install-files
do-install:
# Do install here
install-homebrew: do-install-homebrew install-files
do-install-homebrew:
# Do install-homebrew here
install-files:
# Stuff to do at the end
编辑:
正如@user657267所指出的,在并行构建(make -j...
)的情况下,这可能会中断,因为install-files
可能会在do-install
完成之前被调用。要解决此问题,您可以改为执行以下操作:
install:
$(MAKE) do-install
$(MAKE) install-files
这将确保按顺序运行do-install
和install-files
。
请注意,子制作也将具有您提供给make
的选项:https://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html#Options_002fRecursion,您可以使用-s
选项抑制子制作引起的输出。