Makefile 没有制定目标的规则';startup.s';
我有一个Makefile不断抛出错误:Makefile 没有制定目标的规则';startup.s';,makefile,Makefile,我有一个Makefile不断抛出错误: make:**“all”不需要将目标设置为“startup.s”的规则。停止。 我创建了一些变量: OUT_DIR = ./Build SOURCE_DIR = ./Src SOURCES = main.c SOURCES += startup.s OBJECTS = $(SOURCES:.c=.o) OBJECTS += $(SOURCES:.s=.o) 以下是我的目标: all: setup $(OBJECTS) @echo "Do
make:**“all”不需要将目标设置为“startup.s”的规则。停止。
我创建了一些变量:
OUT_DIR = ./Build
SOURCE_DIR = ./Src
SOURCES = main.c
SOURCES += startup.s
OBJECTS = $(SOURCES:.c=.o)
OBJECTS += $(SOURCES:.s=.o)
以下是我的目标:
all: setup $(OBJECTS)
@echo "Done!"
setup:
@mkdir -p $(OUT_DIR)
%.o : $(SOURCE_DIR)/%.c
@echo "Compiling $<"
$(CC) $(CFLAGS) $< -o $(OUT_DIR)/$@
@echo
%.o : $(SOURCE_DIR)/%.s
@echo "Compiling $<"
$(CC) $(CFLAGS) $< -o $(OUT_DIR)/$@
@echo
all:setup$(对象)
@回声“完成!”
设置:
@mkdir-p$(输出目录)
%.o:$(源目录)/%.c
@echo“编译$您没有用于startup.s
的目标。您有一个使用.s
文件的目标(来自$(源目录)
目录)
startup.s
应该是一个已经存在的文件,可以编译成相应的.o
文件
您的$(对象)
变量不包含您认为它的功能
您认为它包含main.o startup.o
但它不包含main.o startup.s main.c startup.o
(每个替换引用只更改匹配的值。它直接传递不匹配的值。)
您需要向这些行添加一个$(过滤器)
调用,以执行您想要的操作
这就是问题所在。您无意中告诉make在当前目录中构建一个startup.s
文件,而它不知道如何做到这一点
作为此makefile的附加问题,您的%.o
规则不会创建与目标模式匹配的文件,这将混淆make。请参阅GNU make维护程序中的Makefiles规则。(规则3在此处也有点相关。)这不是目标。%.o将是目标,make找不到与.s文件匹配的文件$(资料来源)/%.s将是依赖项。基本上,您需要为%.s制定规则files@DTSCode.s
文件是源文件。它们无法生成。make将其视为目标这一事实本身就是问题所在。@EtanReisner对,这是因为他将其列为一个依赖项,而没有生成的方法building@DTSCode对,这就是问题。他根本不应该把它列为依赖项(在一个不是的地方)。他要么根本不应该明确地列出来(正如我在回答中指出的),要么从正确的位置列出来(这是%.o:$(SOURCE_DIR)/%.s
目标已经做的)。啊!这就是问题所在,hanks@Etan