免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1145 | 回复: 5
打印 上一主题 下一主题

求助一个关于makefile的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-17 10:53 |只看该作者 |倒序浏览
原来的makefile文件是这样的:
ROOT = .
TARGET = test

ACTION_SRC_PATH = $(ROOT)/action/src
ACTION_OBJ_PATH = $(ROOT)/action/obj
ACTION_INC_PATH = $(ROOT)/action/include

LOG_SRC_PATH = $(ROOT)/log/src
LOG_OBJ_PATH = $(ROOT)/log/obj
LOG_INC_PATH = $(ROOT)/log/include


MANAGE_SRC_PATH = $(ROOT)/manager/src
MANAGE_OBJ_PATH = $(ROOT)/manager/obj
MANAGE_INC_PATH = $(ROOT)/manager/include

DB_SRC_PATH = $(ROOT)/db/src
DB_OBJ_PATH = $(ROOT)/db/obj
DB_INC_PATH = $(ROOT)/db/include

LIB_PATH = $(ROOT)/lib

BIN = $(ROOT)


#############################################################
#        The following defines the used commands.

COMPILE = gcc -c
LINK = gcc
AR = ar

#CFLAGS = -Wall -D__DAEMON__
CFLAGS = -Wall -g

IFLAGS =
         -I$(LOG_INC_PATH)
         -I$(DB_INC_PATH)
         -I$(MANAGE_INC_PATH)
         -I$(ACTION_INC_PATH)
         
LFLAGS = -L$(LIB_PATH) -l_csgp  -L/usr/lib/mysql -lmysqlclient -lpthread   

#############################################################
#           The following shows the modules.

ACTION_OBJ =
        $(ACTION_OBJ_PATH)/actionCortrol.o
        $(ACTION_OBJ_PATH)/changeInfo.o
        $(ACTION_OBJ_PATH)/hortation.o
        $(ACTION_OBJ_PATH)/integral.o
        $(ACTION_OBJ_PATH)/isUserLogin.o
        $(ACTION_OBJ_PATH)/query_gift.o
        $(ACTION_OBJ_PATH)/query_point.o
        $(ACTION_OBJ_PATH)/query_userId.o
        $(ACTION_OBJ_PATH)/userLogin.o
        $(ACTION_OBJ_PATH)/addUserIntegral.o
        $(ACTION_OBJ_PATH)/isAnswerTrue.o
        $(ACTION_OBJ_PATH)/query_level.o
ACTION_INC =
        $(ACTION_INC_PATH)/action.h

LOG_OBJ =
        $(LOG_OBJ_PATH)/log_device.o

LOG_INC =
        $(LOG_INC_PATH)/log_device.h


MANAGE_OBJ =
        $(MANAGE_OBJ_PATH)/manager.o
       
MANAGE_INC =
        $(MANAGE_INC_PATH)/manager.h
        $(MANAGE_INC_PATH)/csgpapi.h
       
DB_OBJ =
        $(DB_OBJ_PATH)/db_init.o
        $(DB_OBJ_PATH)/db_connect.o
        $(DB_OBJ_PATH)/db_execute.o
        $(DB_OBJ_PATH)/db_fetch.o
        $(DB_OBJ_PATH)/db_encode.o
        $(DB_OBJ_PATH)/db_error.o
DB_INC =
        $(DB_INC_PATH)/db_device.h
       
INC =
         $(LOG_INC)  $(MANAGE_INC) $(DB_INC)
               
#############################################################
#        The following defines rules.

$(BIN)/$(TARGET):  $(ACTION_OBJ) $(LOG_OBJ) $(DB_OBJ) $(MANAGE_OBJ)  
        $(LINK)    $(LOG_OBJ)  $(DB_OBJ) $(ACTION_OBJ) $(MANAGE_OBJ) -o $@  $(LFLAGS)  $(IFLAGS)  $(CFLAGS)




$(DB_OBJ_PATH)/%.o: $(DB_SRC_PATH)/%.c $(DB_INC)
        $(COMPILE)  $(CFLAGS) $(IFLAGS)  $<  -o $@

$(LOG_OBJ_PATH)/%.o: $(LOG_SRC_PATH)/%.c $(LOG_INC)
        $(COMPILE)  $(CFLAGS)  $(IFLAGS) $<  -o $@

$(ACTION_OBJ_PATH)/%.o: $(ACTION_SRC_PATH)/%.c $(ACTION_INC)
        $(COMPILE)  $(CFLAGS)  $(IFLAGS)  $<  -o $@

$(MANAGE_OBJ_PATH)/%.o: $(MANAGE_SRC_PATH)/%.c $(MANAGE_INC)
        $(COMPILE)  $(CFLAGS) $(IFLAGS)

之后我在action/include/action.h 里加了个新的函数,然后把c文件放到action/src/callrecord.c里了,然后我修改makefile得ACTION_OBJ =
        $(ACTION_OBJ_PATH)/actionCortrol.o
        $(ACTION_OBJ_PATH)/changeInfo.o
        $(ACTION_OBJ_PATH)/hortation.o
        $(ACTION_OBJ_PATH)/integral.o
        $(ACTION_OBJ_PATH)/isUserLogin.o
        $(ACTION_OBJ_PATH)/query_gift.o
        $(ACTION_OBJ_PATH)/query_point.o
        $(ACTION_OBJ_PATH)/query_userId.o
        $(ACTION_OBJ_PATH)/userLogin.o
        $(ACTION_OBJ_PATH)/addUserIntegral.o
        $(ACTION_OBJ_PATH)/isAnswerTrue.o
        $(ACTION_OBJ_PATH)/query_level.o
                $(ACTION_OBJ_PATH)/callrecord.o
  然后我在make 的时候提示我:make: *** No rule to make target `ACTION_OBJ_PATH>/callrecord.o', needed by `test'.  Stop.
我不知道该怎么改才能把新加的c程序放到这个makefile里。大家帮帮忙。

论坛徽章:
0
2 [报告]
发表于 2005-11-17 11:01 |只看该作者
有人理解我的意思吗?自己顶一下

论坛徽章:
0
3 [报告]
发表于 2005-11-17 11:44 |只看该作者
你能不能把action/include/action.h贴出来(包括改的部分)

论坛徽章:
0
4 [报告]
发表于 2005-11-17 12:36 |只看该作者
谢谢torrent ,在程序里我把 $(ACTION_OBJ_PATH)/callrecord.o写成 $<ACTION_OBJ_PATH>/callrecord.o了。现在没问题了

论坛徽章:
0
5 [报告]
发表于 2005-11-17 12:49 |只看该作者
ACTION_OBJ_PATH>/callrecord.o里面多了一个“>”不知道是不是那儿的问题,
你试着把callrecord.o放在第一个,看行不行。

论坛徽章:
0
6 [报告]
发表于 2005-11-17 12:57 |只看该作者
看完唯一的感觉是这个makefile写得太笨了!
如果把VPATH用上根本不需要那么多条目!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP