【问题标题】:Makefile Produces Errors but Builds Fine?Makefile 产生错误但构建良好?
【发布时间】:2019-04-23 01:24:13
【问题描述】:

我正在使用一个 makefile 来构建几个程序。代码如下:

SRCS = prog1.c prog2.c prog3.c
TARG = all
CC = gcc
OPTS = -O
LIBS = -lm

OBJS = $(SRCS:.c=.o)

all: $(TARG)

$(TARG): $(OBJS)
    $(CC) -o $(TARG) $(OBJS) $(LIBS)

%.o: %.c
    $(CC) $(OPTS) -c $< -o $@

clean:
    rm -f $(OBJS) $(TARG)

这个 makefile 完美地生成了三个 prog.o 文件,但我遇到了一个让我困惑的错误:

Makefile:12: recipe for target 'all' failed

我进行了大量搜索,但找不到与我的特定问题相关的任何内容,所以我想知道是否有人对这里发生的事情有所了解。非常感谢!

【问题讨论】:

    标签: c linux makefile recipe


    【解决方案1】:

    使用TARG = all,您有:

    all: all
    
    all: $(OBJS)
    

    将您的程序命名为其他名称,而不是 all

    【讨论】:

    • 如果他真的想调用他的程序all,有没有解决办法?
    • 那么不可能有一个名为all 的“构建一切”目标。我不推荐它。
    • I don't recommend it 好吧,至少在这种简单的情况下,它不会受到伤害,因为all 应该只构建一个文件。因此,即使删除了all:$(TARG)makemake allmake clean all 行,也会按预期工作。
    【解决方案2】:

    您有 all 的循环依赖,这取决于 all(因为 TARG 扩展为 all)。依赖图必须是 DAG。改变

    TARG = all
    

    TARG = something
    

    【讨论】:

    • 如果他真的需要将他的程序命名为all怎么办?
    • @Barmar:他不必有all 目标。 make 将简单地选择第一个,与名称无关。但我会说这是一个错误的程序名称选择,对于习惯于传统 makefile 的任何人来说都是一个惊喜。
    猜你喜欢
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 2019-11-26
    • 2020-12-30
    • 2019-01-19
    • 2019-02-07
    相关资源
    最近更新 更多