我必须做一个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 你能帮我解决这个问题吗? 谢谢:)
答案 0 :(得分:1)
在您的规则命令的-o
的{{1}} 或的末尾,没有看到$(SYS_CFLAGS)
(输出文件说明符)。这就是您的common.o
与手动命令之间的重要区别。
在没有该说明符的情况下,它将尝试对makefile
执行 而不是产生它,尝试将common.o
和common.o
合并为(最有可能) $(SYS_PATH)/common.c
。
要解决此问题,请将规则更改为:
a.out