我需要在Makefile中拥有install
和install-homebrew
个目标。他们应该以相同的方式安装所有文件,主目录除外 - Homebrew的目标应该使用模式750而不是默认的755。
拥有一个主install-files
目标是很自然的,它包含除提到的install -c -d ..
之外的所有内容。但是如何构造Makefile以便在install-files
和install
结束时调用规则install-homebrew
?
答案 0 :(得分:1)
如果两个目标确实完全相同,那么对我来说就像是在寻找像
这样的东西.PHONY: install install-homebrew
install: mode := 755
install-homebrew: mode := 750
install install-homebrew:
# execute whatever using $(mode)
答案 1 :(得分:0)
您可以使用中间规则:
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
选项来抑制子品牌产生的输出。