Makefile找不到规则

时间:2018-10-18 11:44:54

标签: c makefile path

我必须做一个makefile来编译某些东西,但是我遇到了一个问题:当我输入make命令时,我收到一条错误消息,指出目标之一没有规则。问题在于使用环境变量到达目标的路径。

以下是Makefile的给定开头:

    CC = mipsel-unknown-elf-gcc
AS = mipsel-unknown-elf-as
LD = mipsel-unknown-elf-ld
DU = mipsel-unknown-elf-objdump

SYS_OBJS = reset.o \
           giet.o \
           common.o \
           ctx_handler.o \
           drivers.o \
           exc_handler.o \
           irq_handler.o \
           sys_handler.o

APP_OBJS = stdio.o main.o

GIET ?= /(my path)/giet

SYS_PATH = $(GIET)/sys
APP_PATH = $(GIET)/app

SYS_CFLAGS = -Wall -ffreestanding -mno-gpopt -mips32 -I$(SYS_PATH) -I.
APP_CFLAGS = -Wall -ffreestanding -mno-gpopt -mips32 -I$(APP_PATH) -I.

all: sys.bin app.bin

(我应该完成它)

我试图做的事情(sys.bin的规则工作正常):

common.o: common.c
    mipsel-unknown-elf-gcc $(SYS_CFLAGS) common.o $(SYS_PATH)/common.c

我用来编译自己的命令是:mipsel-unknown-elf-gcc -ffreestanding -mno-gpopt -mips32 -I $ GIET / sys -I。 -c -o common.o $ GIET / sys / common.c 你能帮我解决这个问题吗? 谢谢:)

1 个答案:

答案 0 :(得分:1)

在您的规则命令的-o的{​​{1}} 的末尾,没有看到$(SYS_CFLAGS)(输出文件说明符)。这就是您的common.o与手动命令之间的重要区别。

在没有该说明符的情况下,它将尝试对makefile执行 而不是产生它,尝试将common.ocommon.o合并为(最有可能) $(SYS_PATH)/common.c

要解决此问题,请将规则更改为:

a.out