读书人

Makfile 求指点

发布时间: 2013-03-27 11:22:42 作者: rapoo

Makfile 求指导:
测试makefile文件: 求帮忙解决下错误。。以下是编译正常,但我不想用动态链接的方式、静态链接库就
不行了。错误提示已经贴出来、求赐教
1、顶级makefile文件
CC = g++
LIB_PATH := ./module
SRC_PATH := ./src
INC_PATH := ./include

ALL_INC_PATH := -I$(INC_PATH) -I $(LIB_PATH)
CFLAGS:= -Wall -g $(ALL_INC_PATH)
LIB_ALL = -lpthread -L$(LIB_PATH) -ltest

SRC_FILES := $(wildcard $(SRC_PATH)/*.cpp)
OBJ_FILES := $(patsubst $.cpp ,%.o,$(SRC_FILES))
OBJ_SO := $(LIB_PATH)/libtest.so

TARG_OBJ = bin
DEPS_FILE = makefile.deps


all:$(TARG_OBJ) $(DEPS_FILE)

$(TARG_OBJ):$(OBJ_FILES)
cd $(LIB_PATH)&&$(MAKE)
#其实我不想这样写、但是不知道 有什么办法可以调用到
#例如:
#$(TARG_OBJ):$(OBJ_FILES) libs
#
#libs:
#cd $(LIB_PATH)&&$(MAKE)
# 这样他会报错误:g++ libs没有找到文件
#
$(CC) -o $@ $^ -I include -I module $(OBJ_SO)

$(DEPS_FILE):$(SRC_FILES)
$(CC) -MM $(ALL_INC_PATH) $^ > $(DEPS_FILE)


-include $(DEPS_FILE)
clean_all:
rm $(SRC_PATH)/*.o -rf
rm $(TARG_OBJ) -rf
rm $(DEPS_FILE) -rf
cd $(LIB_PATH) &&$(MAKE) clean
clean:
rm $(SRC_PATH)/*.o -rf
rm $(TARG_OBJ) -rf
rm $(DEPS_FILE) -rf

2、子Makefile文件如下
CC = g++

SRC_PATH := ./
INC_PATH := ./

CFLAGS:= -Wall -g $(ALL_INC_PATH)
LIB_ALL = -lpthread

SRC_FILES := $(wildcard $(SRC_PATH)/*.cpp)
OBJ_FILES := $(patsubst $.cpp ,%.o,$(SRC_FILES))

TARG_OBJ = libtest.so
#TARG_OBJ = libtest.a

DEPS_FILE = makefile.deps

all:$(TARG_OBJ) $(DEPS_FILE)

$(TARG_OBJ):$(OBJ_FILES)
$(CC) -fPIC -shared -o $@ $^
#ar -r $@ $^
#2222-》在此处我其实不想做动态库,想用静态库、但是我生产的静态库之后 上一级的makefile调用
#会产生一个错误:module/libtest.a: could not read symbols: Archive has no index; run ranlib to add one
$(DEPS_FILE):$(SRC_FILES)
$(CC) -MM $(ALL_INC_PATH) $^ > $(DEPS_FILE)

-include $(DEPS_FILE)

clean:
rm $(SRC_PATH)/*.o -rf
rm $(TARG_OBJ) -rf
rm $(DEPS_FILE) -rf

install:
cp libtest.a /usr/lib

[解决办法]
用ranlib
ar -r $@ $^
ranlib $@

读书人网 >C++

热点推荐