我有一个关于Makefile的初学者问题。我有一个非常简单的makefile包含:
SHELL = /bin/sh
CC = gcc
CFLAGS = -lm -std=c99 -g -o0
EXEC = test
BUILDDIR = build
OBJDIR = obj
SOURCES = $(shell cat sources.list)
DEPS = $(shell cat headers.list)
OBJ = $(SOURCES:.c=.o)
OBJECTS = $(patsubst %,$(OBJDIR)/%,$(OBJ))
all: $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o $(BUILDDIR)/$(EXEC)
$(OBJDIR)/%.o: %.c $(DEPS)
$(CC) -c $< -o $@
clean:
rm -f $(BUILDDIR)/$(EXEC) $(OBJDIR)/*.o
我的问题是,如果我尝试使用此Makefile进行编译,则会返回错误消息:
there is no rule for the target obj/Name.o
我做错了什么?
在前几个评论和进一步研究之后我得到了这个工作版本,但是它没有在obj文件夹中创建目标文件,所以它不是我的目标
SHELL = /bin/sh
CC = gcc
CFLAGS = -lm -std=c99 -g -o0
EXEC = test
BUILDDIR = build
OBJDIR = obj
SOURCES = $(shell cat sources.list)
DEPS = $(shell cat headers.list)
OBJ = $(SOURCES:.c=.o)
OBJECTS = $(patsubst %,$(OBJDIR)/%,$(OBJ))
all: $(BUILDDIR)/$(EXEC)
$(BUILDDIR)/$(EXEC): $(OBJ)
$(CC) $(CFLAGS) $(OBJ) -o $(BUILDDIR)/$(EXEC)
%.o: %.c $(DEPS)
$(CC) -c $< -o $@
clean:
rm -f $(BUILDDIR)/$(EXEC) $(OBJDIR)/*.o
答案 0 :(得分:1)
headers.list中的所有文件都出现在正确的位置吗?
顺便说一下,这不是处理标头依赖关系的好方法。您应该查看-MP
和-MDD
以及预处理器的其他选项来生成依赖项。
答案 1 :(得分:0)
一个经典的makefile,应该做你需要的:
.camelize.constantize.skip_callback(:after_create)
如果不清楚,请告诉我。
用法:
undefined method '_after_create_callbacks' for #<Class: