Makfile:在规则结束时调用规则

时间:2016-05-19 11:55:30

标签: makefile installation install

我需要在Makefile中拥有installinstall-homebrew个目标。他们应该以相同的方式安装所有文件,主目录除外 - Homebrew的目标应该使用模式750而不是默认的755。

拥有一个主install-files目标是很自然的,它包含除提到的install -c -d ..之外的所有内容。但是如何构造Makefile以便在install-filesinstall结束时调用规则install-homebrew

2 个答案:

答案 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-installinstall-files按顺序运行。

请注意,子品牌也会为make提供选项:https://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html#Options_002fRecursion,您可以使用-s选项来抑制子品牌产生的输出。