首页 文章

我的makefile有什么问题

提问于
浏览
1
#####################################################################
# 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文件夹中.given上面是我试图为我的迷你项目创建的makefile . 我一直得到错误没有规则来制作'obj / buddyAlloc.o'所需的目标'Copy.c',但它工作正常我不包括Copy.c,我做错了什么?

2 回答

  • 4

    这行是你的问题: $(OBJECTS):$(SRC_DIR)/$(SOURCE) . 依赖项的结果字符串(冒号的右侧)是 src/buddyMain.c Copy.c . 换句话说,您正在尝试添加源目录,但它只会被添加到第一个文件中 .

    有很多方法可以解决这个问题:

    • 手动方法:

    SOURCE = $(SRC_DIR)/buddyMain.c $(SRC_DIR)/Copy.c

    VPATH = src

    • 或者,如已在Makefile中使用,使用 addprefix 引入从 SOURCE 构建的新变量:

    SRCS = $(addprefix $(SRC_DIR)/,$(SOURCE))

  • 1

    无论如何,你在_1854420中使用GNUisms,为什么不使用模式规则呢?

    $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
        $(CC) $(CFLAGS) -I$(INC_DIR) -c -o $@ $<
    

相关问题