Makfile的嵌套调用

万能的Makfile,本人今天一直学习Makefile 小有收获现在记录下来、

Makfile的嵌套调用其实就是在顶级Makefile里面通过shell执行子Makefile 来生存动态或者静态库 然后在顶级Makefile里面正确的连接就O了。

下面是例子: 不管多少个子Makefile 只要在相应的模块中复制一个 Makfile进去 修改生存的目标文件即可

有一个地方没完成、希望看到的牛哥哥 提点下、楼主我先就这么用着了! 


本人测试目录:

顶级目录:

顶级makefile

include 

src

module //子模块--- 》里面是*.h *.cpp Makefile

多个子模块、按照module增加就好 修改 目标文件、下面例子中有生存动态库与静态库的两种方式、


:顶级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)
$(CC)  -o  $@ $^   $(CFLAGS) -I include -I module $(LIB_ALL)
$(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 

子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_SO = libtest.so
TARG_OBJ = libtest.a


DEPS_FILE = makefile.deps


all:$(TARG_OBJ) $(DEPS_FILE)


$(TARG_OBJ):$(OBJ_FILES) 
#$(CC) -fPIC -shared -o $@ $^
#ar -rcs  $@ $^
$(CC) -o $@ $^ -lc -lm  -shared
#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 $(TARG_OBJ_SO) -rf  
-rm $(DEPS_FILE) -rf 


install:
-cp libtest.a /lib
-cp libtest.so /lib

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值