将makefile更改为文件中的所有目标位置

时间:2018-09-26 06:32:57

标签: makefile gnu-make gnu

我有一个包含所有目标和伪造目标的大​​makefile,现在我想更改它在文件中的位置,即不是在文件开头。

这是正常的

all: tdir execute build run

tdir:
   @mkdir -p "$(DIR)"
   DIR  := $(CURDIR)

m := $(shell ftr build)
m := $(subst ],,$(subst [,,$(m)))
execute:
 echo test

如果我这样改变所有人的位置,将无法正常工作

tdir:
   @mkdir -p "$(DIR)"
   DIR  := $(CURDIR)

m := $(shell ftr build)
m := $(subst ],,$(subst [,,$(m)))

all: tdir execute build run
execute:
 echo test

我知道我已经tdir,Make是否可以为此类问题提供解决方案? 假设我要将all移到底部

1 个答案:

答案 0 :(得分:0)

如果您运行make并没有在命令行上传递任何目标,则默认情况下 它使makefile中的第一个目标。来自the manual

  

9.2指定目标的参数

     

...

     

默认情况下,目标是makefile中的第一个目标(不计算以句点开头的目标)。   因此,通常将makefile编写为使第一个目标是编译它们描述的整个程序。

     

...

     

您可以使用.DEFAULT_GOAL变量(请参阅其他特殊变量)从makefile中管理对默认目标的选择。

makefile的作者通常将第一个(默认)目标称为all, 但不总是。有时它称为default或其他名称。使 对all没有特殊意义。

如手册所述,您可以通过设置特殊的.DEFAULT_GOAL变量来明确选择默认目标。所以

.DEFAULT_GOAL := all

tdir:
    ...


all: tdir execute build run
    ...

将按照您想要的方式运行。但是如果没有.DEFAULT_GOAL := all, 默认目标是tdir,如果您想创建all,则必须指定 命令行上的目标:

$ make all

.DEFAULT_GOAL很少使用。通常,人们首先写默认目标 在生成文件中,并将其命名为all