opensns 中的Makefile

本文介绍腾讯社区开放平台提供的C++ SDK,详细解析了Makefile配置与编译过程,包括动态链接库生成及示例项目编译步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

example
include
lib
src

Makefile

下面是主目录下的Makefile

ContractedBlock.gif ExpandedBlockStart.gif 代码

   
# #####################################################################
#
OpenAPI C++ edtion Makefile #
#
#####################################################################
CC : = g ++
# #####################################################################
#
配置目录 #
#
#####################################################################
ROOT_DIR : = $ (shell pwd)
SRC_DIR :
= $ (ROOT_DIR) / src
LIB_DIR :
= $ (ROOT_DIR) / lib
INC_DIR :
= $ (ROOT_DIR) / include $ (ROOT_DIR) / include / json
LIBTOOL :
= libtool

SRC_FILES :
= $ (wildcard $ (SRC_DIR) /* .cpp)
OBJ_FILES :
= $ (SRC_FILES:.cpp = .o)
LD_LIBS :
= curl jsoncpp rt

# #####################################################################
#
配置生成的lib文件名称 #
#
#####################################################################
LIB_NAME : = openapi
LIB_SUFFIX :
= .a
LIB_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
endif

all:
$ (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

ContractedBlock.gif ExpandedBlockStart.gif 代码

   
# ##扩展通配符
SRC : = $ (wildcard * .cpp)

.PHONY: all clean

CFLAGS :
= - I.. / src

ifeq (
$ (UST),yes)
LDFLAGS :
= - L.. - static - lopenapi - L.. / lib - static - lcurl - static - ljsoncpp - lrt
else
LDFLAGS :
= - L.. - lopenapi
endif
# ##替换通配符
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值