Makfile:在规则末尾调用规则



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

有一个主要的install-files目标是很自然的,它包含除上述install -c -d ..之外的所有内容。但是如何构造 Makefile,以便在 installinstall-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-installinstall-files

请注意,子制作也将具有您提供给make的选项:https://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html#Options_002fRecursion,您可以使用-s选项抑制子制作引起的输出。

最新更新