【发布时间】:2013-01-23 05:16:58
【问题描述】:
在 makefile 中构建多个目标的情况下,当我说“make”时,默认情况下会生成所有目标。是否可以将 all 的默认值更改为其他值?
all : target1 target2
现在,当我发出命令 'make' 时,我只想构建 target1。
【问题讨论】:
在 makefile 中构建多个目标的情况下,当我说“make”时,默认情况下会生成所有目标。是否可以将 all 的默认值更改为其他值?
all : target1 target2
现在,当我发出命令 'make' 时,我只想构建 target1。
【问题讨论】:
只需添加一行:
target1:
在定义all 的规则之前。名称all 并不特殊:由于是列出的第一条规则,它成为默认值。通过在该行之前添加target1:,target1 成为默认值。请注意,允许规则的多个定义不是标准行为(这基本上是一个假规则,其行为稍后在 Makefile 中定义),但这将适用于 gnu make。如果不行,把target1的实际定义移到all的定义之前。
【讨论】:
就像 Carl 提到的那样,您可以从行中删除 target2。
但是,如果您仍然希望所有人都制作 target1 和 target2,还有一些选择...
你没有说你使用的是哪个品牌,这些细节取决于版本,但我会详细说明它是如何在 GNU make 上工作的。
在 GNU make 中,第一个目标成为默认目标。所以如果你有一个像这样的 Makefile:
next:
@echo "next"
all:
@echo "All"
它将打印:
$ make
next
您还可以更改默认目标:
.DEFAULT_GOAL=other
next:
@echo "next"
all:
@echo "All"
other:
@echo "other"
它会显示:
$ make
other
这是与:
$ make --version
GNU Make 3.81
【讨论】:
DEFAULT_GOAL 不是标准变量,尽管它可以被 gnu make 识别。标准行为是将 Makefile 中指定的第一条规则设为默认值。
当然,只需从该行中删除 target2。
【讨论】: