【问题标题】:Whats wrong with my makefile我的makefile有什么问题
【发布时间】:2011-01-16 03:14:57
【问题描述】:
#####################################################################
# 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。 我不断收到错误 no rule to make target 'Copy.c' required by 'obj/buddyAlloc.o',但如果我不包含 Copy.c,它工作正常,我做错了什么?

【问题讨论】:

  • 当心尾随反斜杠,如 SOURCE 列表中 Copy.c 之后的反斜杠。在这种情况下,您没问题,但一般情况下,请避免让列表以反斜杠结尾。

标签: makefile gnu-make


【解决方案1】:

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

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

  1. 手动方法:

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

  2. VPATH,将目录添加到每个搜索路径(参见http://www.gnu.org/software/make/manual/make.html#General-Search

    VPATH = src

  3. 或者,正如已经在 Makefile 中使用的那样, 使用addprefix 引入一个新变量 由SOURCE 构建:

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

【讨论】:

  • 诊断正确,但推荐的治疗方法是什么?
  • 他的命令不应该使用-o $(OBJ_DIR)/$(OBJECTS),因为$(OBJECTS) 已经添加了$(addprefix 的目录。另外,我很确定 C 编译器不能像那样吐出所有对象。为什么不直接使用模式规则?
  • @user577220 - 如果它解决了您的问题,请记住将其标记为正确。
【解决方案2】:

无论如何,您在Makefile 中使用的是 GNUisms,那么为什么不直接使用模式规则呢?

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

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 2012-09-10
    • 2013-06-29
    • 2016-02-03
    • 2011-06-15
    相关资源
    最近更新 更多