stronghe123 / sqlite3.7.9

基于MacOS+Clion+Cmake把 sqlite3.7.9跑起来

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

sqlite3.7.9

SQLite那么多的下载包

2016年的8月份打开http://www.sqlite.org/download.html
发现 下载包真多,但是关于源码包只有四个,

分别是sqlite-amalgamation-3140100.zip 只有若干个文件,混合版的sqlite3.c
sqlite-autoconf-3140100.tar.gz 只有若干个文件,混合版的sqlite3.c跟很多TCL脚本等
sqlite-src-3140100.zip 开发环境下的最原始包。
sqlite-preprocessed-3140100.zip 经过处理的,模块清晰的sqlite源码

很明显了,我们要用preprocessed这份代码。但是sqlite-preprocessed-3140100.zip 这份代码已经22万行代码。

我们再去查查相关的知识,

SQLite外键(Foreign Key)支持 从SQLite 3.6.19 开始支持 外键约束,我们学习中尽量精简,
就看该书用的SQLite3.3.6发行版,就是sqlite-3.3.6.tar.gz,这份代码就 6万多行。
不过3.3.6版本不提供 preprocessed版本。还需要自己生成代码,有点火大。
不行,一定得找preprocessed代码来学习。

继续找,也只有3.7版本开始才有提供preprocessed版本。 最后决定使用sqlite-preprocessed-3070900.zip 来学习,妈的,这版本的代码有129个文件,一共14万行代码。

用IDEA跑起来

把所有代码扔到项目底下,增加一个cmake文件如下:

cmake_minimum_required(VERSION 3.5)
project(sqlite3)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -DSQLITE_CORE=1")

include_directories(${CMAKE_CURRENT_SOURCE_DIR}) #like gcc: -I
file(GLOB sources "*.c")
file(GLOB headers "*.h")
add_executable(sqlite3 ${sources} ${headers})

编译的时候,遇到两个错误。 1)编译的时候,有TCL的错:

解决方法:把tclsqlite.c删除即可。tcl脚本功能就费掉了。。

2)编译的时候,有错如下:

fts1 has a design flaw and has been deprecated.

解析:FTS1和FTS2都有设计的缺陷,现在已经被废弃,目前已经提供了FTS3或者FTS4,这些作为全文搜索的模块,弥补了以前的FTS1的不足。如果确定不会使用到全文搜索,可以直接使用SQLITE_CORE,禁用。将SQLITE_CORE添加到编译选项。

解决方法:在CMakeLists.txt加上这句话-DSQLITE_CORE=1即可:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -DSQLITE_CORE=1")

最后成功跑起来。。


ends;

parse.c 跟 parse.h的代码 是使用了LEMON程序根据parse.y生成的。

About

基于MacOS+Clion+Cmake把 sqlite3.7.9跑起来


Languages

Language:C 99.0%Language:Yacc 1.0%Language:CMake 0.0%