【问题标题】:Change the makefile all target place in the file更改makefile文件中的所有目标位置
【发布时间】:2018-09-26 06:32:56
【问题描述】:

我有一个很大的 makefile,其中包含 all 和 phony 目标,现在我想更改它在文件中的位置,即不在文件开头

这是有效的

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 移到底部

【问题讨论】:

  • "Not working" 不能清楚地描述您的问题。如果您希望 all 成为默认目标(即调用 make 时使用的目标,而不在命令行上指定目标),请在您的问题中明确说明(并查看 .DEFAULT_GOAL make 中的特殊变量GNU make documentation).

标签: makefile gnu-make gnu


【解决方案1】:

如果你运行 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 很少使用。通常,人们首先编写默认目标 在 makefile 中,并将其命名为 all

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 2010-11-28
    • 2012-11-22
    • 2021-10-25
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多