求教一个makefile问题

周靖峰 2013-02-04 02:49:15

VISIONAPP_DIR = /home/server/zjf/workspace/visionapp

INCLUDE_DIR = \
$(VISIONAPP_DIR)/API \
$(VISIONAPP_DIR)/API/IPUcommon \
$(VISIONAPP_DIR)/foundation \
$(VISIONAPP_DIR)/Device \
$(VISIONAPP_DIR)/system \
$(VISIONAPP_DIR)/system/lua_inc
SRC_DIR = \
$(VISIONAPP_DIR)/API \
$(VISIONAPP_DIR)/system \
$(VISIONAPP_DIR)/foundation \
$(VISIONAPP_DIR)/Device
OBJ_DIR = ./obj
LIB_DIR = ./lib

OUTPUT = libvisionapp.a
#OUTPUT = main
SRCS = $(wildcard $(addsuffix /*.cpp, $(SRC_DIR)))
#SRCS = $(SRC_DIR)/main.c
OBJS = $(addprefix $(OBJ_DIR)/, $(patsubst %.cpp, %.o, $(notdir $(SRCS))))
LIBS = $(wildcard $(addsuffix /*.a, $(LIB_DIR)))
INCLUDES = $(wildcard $(addsuffix /*.h, $(INCLUDE_DIR)))

MKDIR = mkdir
CROSS = arm-hismall-linux-
CC = $(CROSS)g++
CFLAGS = -Wall -g -I $(INCLUDE_DIR)
LDFLAGS = -L $(LIB_DIR)
AR = $(CROSS)ar
ARFLAGS = cqs
RM = rm
RMFLAGS = -rf

.PHONY : all clean MKDIR

all : $(OBJ_DIR) $(OUTPUT)

$(OBJ_DIR) :
$(MKDIR) $@
@echo $(SRCS)
@echo $(OBJS)
@echo $(INCLUDES)

$(OUTPUT) : $(OBJS)
$(AR) $(ARFLAGS) $@ $(OBJS)
#$(OUTPUT) : $(OBJS) $(LIBS)
# $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)

$(OBJ_DIR)/%.o : $(addsuffix /%.cpp, $(SRC_DIR)) $(INCLUDES)
$(CC) $(CFLAGS) -o $@ -c $<

clean :
$(RM) $(RMFLAGS) $(OBJ_DIR) $(OUTPUT)


这是小弟写的makefile文件,问题出在第57行,也就是

$(OBJ_DIR)/%.o : $(addsuffix /%.cpp, $(SRC_DIR)) $(INCLUDES)


其中OBJ_DIR是当前目录下的obj文件夹
SRC_DIR有很多文件夹
直接写成

$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp $(INCLUDES)

肯定不行,因为SRC_DIR扩展后,只有最后一个文件夹能匹配,前面几个文件夹都不会带上.cpp

所以我就想出这个方法
$(OBJ_DIR)/%.o : $(addsuffix /%.cpp, $(SRC_DIR)) $(INCLUDES)

第二部分在SRC_DIR中的所有目录后面加上/%.cpp,这样按道理就应该能匹配了

但现实是,这样做是错误的,我不知道到底哪里出错了,求高手指点
...全文
129 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
daviddb7 2013-02-05
  • 打赏
  • 举报
回复

$(OBJDIR)%.o: %.cpp

vpath %.cpp $(SRC_DIR)
试试
ljhnew 2013-02-04
  • 打赏
  • 举报
回复
有必要写这么复杂吗? 整个makefile可以简单化,能解决问题就可以 gmake的makefile,可以用类似 $(OBJ):$(OBJDIR)%.o:$(SRCDIR)system/%.cpp 格式来进行自动推导,即两个冒号

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧