Makefile Makfile:在规则末尾调用规则
我需要在Makefile中设置Makefile Makfile:在规则末尾调用规则,makefile,installation,Makefile,Installation,我需要在Makefile中设置安装和安装自制目标。他们应该以相同的方式安装所有文件,主目录除外–Homebrew的目标应该使用模式750,而不是默认的755 很自然地,只有一个主安装文件目标,它包含除上述安装-c-d..之外的所有内容。但是如何构造Makefile,以便在安装和安装自制的末尾调用规则安装文件?您可以使用中间规则: install: do-install install-files do-install: # Do install here install-homebr
安装
和安装自制
目标。他们应该以相同的方式安装所有文件,主目录除外–Homebrew的目标应该使用模式750,而不是默认的755
很自然地,只有一个主
安装文件
目标,它包含除上述安装-c-d..
之外的所有内容。但是如何构造Makefile,以便在安装
和安装自制
的末尾调用规则安装文件
?您可以使用中间规则:
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..
)的情况下,这可能会中断,因为在do install
完成之前可能会调用安装文件。要解决此问题,您可以改为:
install:
$(MAKE) do-install
$(MAKE) install-files
这将确保按顺序运行do install
和install files
请注意,sub make将具有您为make
提供的选项:,并且您可以使用-s
选项抑制sub make引发的输出。如果两个目标确实做了完全相同的事情,那么我觉得您在寻找类似的输出
.PHONY: install install-homebrew
install: mode := 755
install-homebrew: mode := 750
install install-homebrew:
# execute whatever using $(mode)
如果使用-j
调用make,这可能会中断,这取决于配方的作用。@user657267我不明白为什么会在这里出现。make-j install
可能会在do install
完成之前触发install file
,如果安装文件
配方必须在最后运行,那么这可能意味着麻烦。@user657267好的。我不知道为什么我认为make-j
尊重依赖顺序。那将使它毫无意义。我会考虑如何使我的回答更友好。感谢您的评论。-j
确实尊重先决条件的顺序,因为make仍将以相同的顺序启动它们,但同时运行它们(除非您说它们相互依赖)。因此,您实际上无法判断哪些命令将首先运行或完成:这取决于操作系统以及它如何安排作业。我不知道GNU make中的:=
分配。谢谢