使用waf链接第三方库

这玩意的官方文档写的特别简陋,加上方法复杂多样,导致上手难度max,想精通的话全凭试错。。。不说了,上一个很简单的目录结构:

.
├── example.db3
├── include
│   ├── Assertion.h
│   ├── Backup.h
│   ├── Column.h
│   ├── Database.h
│   ├── Exception.h
│   ├── ExecuteMany.h
│   ├── SQLiteCpp.h
│   ├── Statement.h
│   ├── Transaction.h
│   ├── Utils.h
│   └── VariadicBind.h
├── lib
│   ├── libSQLiteCpp.a
│   └── libSQLiteCpp.so
├── main.cpp
├── waf
└── wscript

使用之前生成的库对程序进行编译链接,wscript内容如下:

import os

top ='.'
out='build'

def options(opt):
	opt.load('compiler_cxx')
	pathInc=os.path.join(opt.path.abspath(),'include')
	pathLib=os.path.join(opt.path.abspath(),'lib')
	opt.add_option('--include',action='store',default=pathInc,dest='INCLUDE')
	opt.add_option('--lib',action='store',default=pathLib,dest='LIB')

def configure(conf):
	conf.load('compiler_cxx')
	conf.env.LIBPATH=conf.options.LIB
	conf.env.INCLUDE=conf.options.INCLUDE
	conf.check_cxx(lib='sqlite3',uselib_store='SQLite')

def build(bld):
	bld.program(source='main.cpp',target='main',use='SQLite',lib='SQLiteCpp',libpath=bld.env.LIBPATH,includes=bld.env.INCLUDE)
	# bld.program(source='main.cpp',target='main',use='SQLite',stlib='SQLiteCpp',libpath=bld.env.LIBPATH,includes=bld.env.INCLUDE)

其中bld系统方式五花八门,给的指导也很简单,有研究这的工夫CMake都手写完几遍了。
顺便有些个人感受:

使用use或者stlib或者lib的时候,要灵活,根据库的路径决定使用方式。
比如在系统路径下的就先check一下,给其指定调用名字,然后后边use一下;而自定义的库就得用lib或者stlib了。
这是使用第三方库的情况,要是自己编译生成的话就不用这么麻烦了,连路径都不用管

总之,所有的辅助编译工具调用的还是gcc,不过是配置和管理的复杂程度而已,对make的理解还是基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值