【问题标题】:Makefile : No rule to make target (automatic variables)Makefile:没有规则来制作目标(自动变量)
【发布时间】:2011-08-24 14:24:00
【问题描述】:

我的 makefile 有问题,我一直在阅读一些关于如何制作更可重用的 makefile 的教程,但我遇到了这个错误,我已经搜索了一段时间,尤其是在 GNU make 手册上和这里。

这是我的生成文件:

SRC_DIR=./src
BUILD_DIR=./build
OBJS= $(BUILD_DIR)/main.o $(BUILD_DIR)/hamming.o

$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c $(SRC_DIR)/%.h
    $(CC) -c $< $(CFLAGS) -o $@

$(BUILD_DIR)/main: $(OBJS)
    $(CC) -o $@ $^ $(CFLAGS)

我遇到了错误:

ma​​ke:没有规则可以创建目标 build/main.o', needed bybuild/main'。停止。

在我看来,变量 OBJS 中的对象与 %.o 模式规则无关,但我不知道为什么。

在我的工作目录中有:我的 makefile 和两个目录 'src' 和 'build'。

谢谢。

【问题讨论】:

    标签: makefile


    【解决方案1】:

    我会四处走动并猜测没有src/main.h。如果是这种情况,您可以这样解决问题:

    $(BUILD_DIR)/hamming.o: $(BUILD_DIR)/%.o : $(SRC_DIR)/%.h
    
    $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
        $(CC) -c $< $(CFLAGS) -o $@
    

    编辑:
    现在我很困惑。请试试这个(它很粗糙,但如果它有效,我们可以改进它):

    SRC_DIR=./src
    BUILD_DIR=./build
    OBJS= $(BUILD_DIR)/main.o $(BUILD_DIR)/hamming.o
    
    $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c $(SRC_DIR)/%.h
        $(CC) -c $< $(CFLAGS) -o $@
    
    $(BUILD_DIR)/main.o: $(SRC_DIR)/main.c
        $(CC) -c $< $(CFLAGS) -o $@
    
    $(BUILD_DIR)/main: $(OBJS)
        $(CC) -o $@ $^ $(CFLAGS)
    

    【讨论】:

    • 不,没有 main.h。事实上,错误表明“main.o”没有规则,所以我尝试输入 $(BUILD_DIR)/main.o: $(BUILD_DIR)/%.o 但它没有成功。还是谢谢你。
    • 当然$(BUILD_DIR)/main.o: $(BUILD_DIR)/%.o 不行。 试试我发布的内容。
    • 错误信息可能让您感到困惑:隐式规则可能已被匹配并随后被拒绝(在gnu.org/software/make/manual/make.html#Implicit-Rule-Search 的第5 步);您应该能够通过查看make -d 的输出来确定这一点。
    • 我在“make-d”中得到了这个:pastebin.com/T5Li5rzs,我真的不知道如何分析这个!
    • 现在可以完美运行了。所以然后我尝试执行 OBJS= $(BUILD_DIR)/hamming.o $(BUILD_DIR)/main.o 以便首先完成文件 hamming.o,编译 hamming.o 文件但随后我收到相同的错误消息与 main.o 文件。我猜那是因为确实没有 main.h,依赖关系不满足( $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c $(SRC_DIR)/%.h )所以 main.o 是没有制作。所以我创建了一个 main.h 文件,现在我原来的 makefile 可以完美运行了! @Beta:我想你说得对,指出没有 src/main.h 文件,谢谢!
    【解决方案2】:

    这是我不久前为NMake 整理的一些文档,希望对您有所帮助。您确定命令之前只有选项卡吗?你不能有空格,这是我过去看到的第一个错误。

    【讨论】:

    • 感谢您的回答。我刚刚检查过,每个命令之前只有一个选项卡。
    猜你喜欢
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    相关资源
    最近更新 更多