#####################################################################
# This is the filesystem makefile "make_BuddyAlloc".
# Author:Michael Gomes
# Date:2 jan 2011
######################################################################
#variable defination
CC = gcc
CFLAGS = -g -O2
SRC_DIR=src
INC_DIR=inc
OBJ_DIR=obj
#List of source files
SOURCE= buddyMain.c \
Copy.c \
#List of object files
OBJECTS=$(addprefix $(OBJ_DIR)/,$(SOURCE:.c=.o))
#BuddyAlloc is dependent on "obj/*.o".
BuddyAlloc : $(OBJECTS)
$(CC) $(CFLAGS) -o BuddyAlloc $<
#obj/*.o depends on src/*.c and inc/*.h, we are redirecting the object files to obj folder
$(OBJECTS):$(SRC_DIR)/$(SOURCE)
$(CC) $(CFLAGS) -I$(INC_DIR) -o $(OBJ_DIR)/$(OBJECTS) -c $<
#Cleans all the *.exe files
clean:
rm -f *.exe
我保留了src文件夹下的源文件包含在inc文件夹下,目标文件保存在obj文件夹中。上面是我正在尝试为我的迷你项目创建的makefile。 我一直得到错误没有规则来制作'obj / buddyAlloc.o'所需的目标'Copy.c',但它工作正常我不包括Copy.c,我做错了什么?
答案 0 :(得分:4)
此行是您的问题:$(OBJECTS):$(SRC_DIR)/$(SOURCE)
。依赖项的结果字符串(冒号的右侧)是src/buddyMain.c Copy.c
。换句话说,您正在尝试添加源目录,但它只会被添加到第一个文件中。
有很多方法可以解决这个问题:
手动方法:
SOURCE = $(SRC_DIR)/buddyMain.c $(SRC_DIR)/Copy.c
VPATH
,它将目录添加到每个搜索路径(请参阅http://www.gnu.org/software/make/manual/make.html#General-Search)
VPATH = src
或者,正如Makefile中已经使用的那样,
使用addprefix
引入一个新变量
从SOURCE
建立:
SRCS = $(addprefix $(SRC_DIR)/,$(SOURCE))
答案 1 :(得分:1)
你在Makefile
中使用的是GNUisms,那么为什么不使用模式规则?
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -I$(INC_DIR) -c -o $@ $<