Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/installation/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile Makfile:在规则末尾调用规则_Makefile_Installation - Fatal编程技术网

Makefile Makfile:在规则末尾调用规则

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

我需要在Makefile中设置
安装
安装自制
目标。他们应该以相同的方式安装所有文件,主目录除外–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中的
:=
分配。谢谢