【问题标题】:Makefile: Pattern rule as first ruleMakefile:模式规则作为第一规则
【发布时间】:2019-02-21 00:13:10
【问题描述】:

我知道make 如果在没有任何参数的情况下调用,通常会执行第一个目标。但是如果第一个目标是模式规则会发生什么?我这里有一个 Makefile,如下所示:

%.o: %.cc
        gcc -c -o $@ $<
main: main.o helper.o
        gcc main.o helper.o -o $@

根据我对make 的理解,在这种情况下,仅在不带任何参数的情况下调用它可能会导致某种错误,因为据我所知,第一个目标始终是默认目标,不会使感觉 make 是否没有给出任何参数。但是当我用这个 Makefile 调用 make 时,它会构建 main 目标(当然,递归目标 main.ohelper.o 也是如此)。 那么,make 在查找第一个目标时会忽略模式规则总是是真的吗?将那些真正想成为默认目标的人放在目标前面是否被认为是一种不好的风格?在我看来,这有点令人困惑。

【问题讨论】:

  • In my opinion, this is somehow confusing 您可以使用.DEFAULT_GOAL:=target_name 明确设置默认规则。

标签: makefile gnu-make


【解决方案1】:

来自GNU make manual

规则的顺序并不重要,除了确定 默认目标:make要考虑的目标,如果你不这样做 指定一个。默认目标是第一个规则的目标 第一个makefile。如果第一条规则有多个目标,则只有第一个 目标被视为默认值。有两个例外:一个目标 以句点开头不是默认设置,除非它包含一个或多个 斜线,“/”,以及;并且,定义模式规则的目标具有 对默认目标没有影响。 (请参阅定义和重新定义模式 规则。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多