opensns 中的Makefile

腾讯在做社区开放平台,在网站上提供了SDK下载,我下载了C++版,然后看了下起C++的Makefile,分析了下,感觉还是不错的一个Makefile,于是做了下笔记。

在cpp目录下有四个目录和一个Makefile,其中example目录还有一个额外的Makefile,src中是封装的CPengyou类。

example

include

lib

src

Makefile

下面是主目录下的Makefile
opensns 中的Makefileopensns 中的Makefile代码

#######################################################################                  OpenAPI C++ edtion Makefile                       #######################################################################CC         := g++#######################################################################                  配置目录                                          #######################################################################ROOT_DIR   := $(shell pwd)SRC_DIR    := $(ROOT_DIR)/srcLIB_DIR    := $(ROOT_DIR)/libINC_DIR    := $(ROOT_DIR)/include $(ROOT_DIR)/include/jsonLIBTOOL    := libtoolSRC_FILES  := $(wildcard $(SRC_DIR)/*.cpp)OBJ_FILES  := $(SRC_FILES:.cpp=.o)LD_LIBS    := curl jsoncpp rt#######################################################################                  配置生成的lib文件名称                             #######################################################################LIB_NAME   := openapiLIB_SUFFIX := .aLIB_TARGET := lib$(LIB_NAME)$(LIB_SUFFIX)#######################################################################                  配置编译选项                                      ##########################################################################每次调用时都会执行,无视内置规则.PHONY: all clean example###addprefix --make内置函数,添加前缀LDFLAGS    := -L$(LIB_DIR) $(addprefix -l,$(LD_LIBS))CFLAGS     := -O2 -Werror -DCURL_STATICLIB -I$(SRC_DIR) $(addprefix -I,$(INC_DIR))##是否需要调试ifeq ($(DEBUG),yes)CFLAGS     += -ggdb2 -D__DEBUG endifall: $(LIB_TARGET) example;#######################################################################                 生成动态链接库                                     #######################################################################$(LIB_TARGET): $(OBJ_FILES)    $(AR) -rc $@ $(OBJ_FILES)    $(CC) -shared -fpic -o $(LIB_TARGET:.a=.so) $(OBJ_FILES) $(LDFLAGS)    @echo *********Build $@ $(LIB_TARGET:.a=.so) Successful*********    @echo###进入测试目录,依赖于库的生成,最后编译example: $(LIB_TARGET)    @cd example && make UST=yes       ##传递了一个参数,生成静态参数    @echo ***************Build $@ Successful************###自依赖%.o: %.cpp    $(CC) $(CFLAGS) -c $< -o $@clean:    @echo clean...    @rm -rf $(LIB_TARGET) $(LIB_TARGET:.a=.so) $(OBJ_FILES) $(LIB_TARGET:.a=.bin)    @cd example && make clean

Makefile中用到的知识都比较常规。

用到了wildcard——通配符匹配

在example的目录下Makefile
opensns 中的Makefileopensns 中的Makefile代码

###扩展通配符SRC := $(wildcard *.cpp).PHONY: all cleanCFLAGS := -I../srcifeq ($(UST),yes)LDFLAGS := -L.. -static -lopenapi -L../lib -static -lcurl -static -ljsoncpp -lrtelseLDFLAGS := -L.. -lopenapiendif###替换通配符all: $(patsubst %.cpp,%,$(SRC));%:%.cpp    g++ $(CFLAGS) -o $@ $^ $(LDFLAGS)clean:    @rm -f $(patsubst %.cpp,%,$(SRC))

在这个Makefile新认识了一个函数patsubst,这个函数是替换通配符的。

本人刚刚学习Makefile,深知阅读理解优秀的Makefile的重要性。希望慢慢提高。
原文链接: https://www.cnblogs.com/westfly/archive/2010/12/14/1905259.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/18751

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午7:38
下一篇 2023年2月7日 下午7:40

相关推荐