sqlite3.47.1-windows编译

修订记录

日期

修订版本

修改章节

2025.03.04

v1.0

修改《1.2windows编译》CMakeList.txt脚本内容

2025.03.12

v1.1

修改《1.2windows编译》章节

1.修改CMakeList.txt内容

2.代码目录调整,同步对应操作截图

        本文操作按照《c&c++开源库编译指南》中内容规范编写,编译环境配置、工具下载、目录规划,及更多其他开源库编译方法请参考该文章。

        c&c++开源库编译指南:https://blog.youkuaiyun.com/binary0006/article/details/144086155

        本文章中的源代码已提交到gitee仓库,地址:https://gitee.com/binary0010/depends/tree/master/c/sqlite-amalgamation-3470100

1.源代码下载

        源代码下载地址:https://www.sqlite.org/download.html,直接下载最新版,当前最新版本为3.47.1。

        作为开发使用一般选择amalgamation(合并)形式的代码,后面会使用CMake来实现跨平台构建和编译。

        windows下编译除了下载源代码还需要sqlite3.def文件,该文件在sqlite-dll-win-x86-3470100.zip中,网页上也有该下载地址。

sqlite-amalgamation-3470100.zip下载地址:https://sqlite.org/2024/sqlite-amalgamation-3470100.zip

sqlite-dll-win-x86-3470100.zip下载地址:https://sqlite.org/2024/sqlite-dll-win-x86-3470100.zip

sqlite-dll-win-x64-3470100.zip下载地址:https://sqlite.org/2024/sqlite-dll-win-x64-3470100.zip

2.windwos编译

        先解压源代码到指定目录,sqlite-amalgamation-3470100源代码中只有.h和.c的代码文件,shell.c文件实际上在开发中也不需要,而且该文件在windows上编译会有个错误,在我们编写的CMakeLists.txt中不需要添加该文件。

        还需要将sqlite-dll-win-x86-3470100.zip文件中的sqlite3.def文件解压到源代码目录。

        接下来我们编写sqlite编译使用的CMakeLists.txt文件,CMakeLists.txt中内写的CMakeLists.txt文件。

        最终sqlite编译需要的文件如下图所示。

        CMakeLists.txt文件内容如下,编译时宏定义参数参考https://sqlite.org/compile.html。 

cmake_minimum_required(VERSION 3.15)
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)

if(POLICY CMP0091)
    # https://stackoverflow.com/a/56490614
    cmake_policy(SET CMP0091 NEW)
endif()
# The options need to be the same as Open3D's default
# If Open3D is configured and built with custom options, you'll also need to
# specify the same custom options.
# option(STATIC_WINDOWS_RUNTIME "Use static (MT/MTd) Windows runtime" ON)
# # This needs cmake_policy(SET CMP0091 NEW)
# if (STATIC_WINDOWS_RUNTIME)
# set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
# else()
# set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
# endif()
project(sqlite3 LANGUAGES C)
set(VERSION "3.47.1")
# set(output_dirname ${CMAKE_PROJECT_NAME}-${VERSION})

# 公共配置
include(../../cmake/third-common.cmake)

set(INSTALL_BIN_DIR "${third-bin}/${PROJECT_NAME}-${VERSION}" CACHE PATH "Installation directory for executables")
set(INSTALL_LIB_DIR "${third-lib}/${PROJECT_NAME}-${VERSION}" CACHE PATH "Installation directory for libraries")
set(INSTALL_INC_DIR "${third-include}/${PROJECT_NAME}-${VERSION}" CACHE PATH "Installation directory for headers")
set(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages")
set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")

# vs编译器特化设置
if(MSVC)
    # 增加sqlite3需要的宏定义
    add_definitions(-DSQLITE_THREADSAFE=1)
    add_definitions(-DSQLITE_THREAD_OVERRIDE_LOCK=1)
    add_definitions(-DSQLITE_TEMP_STORE=1)
    add_definitions(-DSQLITE_MAX_TRIGGER_DEPTH=100)
    add_definitions(-DSQLITE_ENABLE_FTS3=1)
    add_definitions(-DSQLITE_ENABLE_FTS5=1)
    add_definitions(-DSQLITE_ENABLE_RTREE=1)
    add_definitions(-DSQLITE_ENABLE_GEOPOLY=1)
    add_definitions(-DSQLITE_ENABLE_STMTVTAB=1)
    add_definitions(-DSQLITE_ENABLE_DBPAGE_VTAB=1)
    add_definitions(-DSQLITE_ENABLE_DBSTAT_VTAB=1)
    add_definitions(-DSQLITE_ENABLE_BYTECODE_VTAB=1)
    add_definitions(-DSQLITE_ENABLE_COLUMN_METADATA=1)
    add_definitions(-DSQLITE_ENABLE_MATH_FUNCTIONS)
    add_definitions(-DSQLITE_ENABLE_SESSION=1)
    add_definitions(-DSQLITE_ENABLE_PREUPDATE_HOOK=1)
    add_definitions(-DSQLITE_ENABLE_RBU=1)
endif()

set(SQLITE_PUBLIC_HDRS
    sqlite3.h
sqlite3ext.h)

set(SQLITE_SRCS
sqlite3.c)

# 动态库工程
add_library(sqlite3dll SHARED ${SQLITE_PUBLIC_HDRS} ${SQLITE_SRCS} sqlite3.def)

# 静态库工程
add_library(sqlite3lib STATIC ${SQLITE_PUBLIC_HDRS} ${SQLITE_SRCS})

# vs编译器特化设置
if(MSVC)
    # mt动态库工程
    add_library(sqlite3dllmt SHARED ${SQLITE_PUBLIC_HDRS} ${SQLITE_SRCS} sqlite3.def)
    set_property(TARGET sqlite3dllmt PROPERTY
        MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")

    # mt静态库工程
    add_library(sqlite3libmt STATIC ${SQLITE_PUBLIC_HDRS} ${SQLITE_SRCS})
    set_property(TARGET sqlite3libmt PROPERTY
        MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")

    # 查找pdb文件
    file(GLOB_RECURSE SQLITE_DEBUG_SYMBOLS ${PROJECT_BINARY_DIR}/output/
        FILES_MATCHING PATTERN "sqlite*.pdb")
endif()

# 安装编译输出的二进制文件
if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
    install(TARGETS sqlite3dll sqlite3lib sqlite3dllmt sqlite3libmt
        RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
        ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
        LIBRARY DESTINATION "${INSTALL_LIB_DIR}")
endif()

# 安装外部开发时需要的头文件
if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL)
    install(FILES ${SQLITE_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}")
endif()

# 安装pdb文件
if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL)
    install(FILES ${SQLITE_DEBUG_SYMBOLS} DESTINATION "${INSTALL_BIN_DIR}")
endif()

2.1vs2008编译

        CMakeLists.txt文件编写好之后,只需要使用CMake工具生成vs2008的工程即可,操作步骤按下面描述操作即可。

2.1.1cmake构建目录设置

        选择源代码根目录(CMakeLists.txt文件在这个目录),设置build目录为源代码根目录下的cmake-vs2008绝对路径为D:/x-app/depends/c/sqlite-amalgamation-3470100/cmake-vs2008,保证源代码目录干净,会生成工程和临时文件,同时也方便后续有其他的构建工具扩展管理。

2.1.2 应用CMake配置

点击“Configure”会弹出编译器选择对话框,这里选择“Visual Studio 9 2008”点击“Finish”按钮等待配置参数完成。 

​​​​​​​

2.1.3 生成vs解决方案

        下面的红色警告忽略不用管,意思是未来的cmake版本不再支持生成vs2008的解决方案。

2.1.4 编译工程

        使用vs2008打开“sqlite3.sln”解决方案文件,分别编译Debug和RelWithDebInfo配置。

​​​​​​​

2.1.5 安装库文件、头文件

        编译Install工程的Debug和RelWithDebInfo配置,.h文件和编译生成.dll、.lib、pdb文件会拷贝CMakeList.txt中设置的路径下。

        至此通过一个CMakeLists配置文件将windows下vs2008常用编译类型的库全部编译出来了,最终库的对应关系如下。

库类型

运行库类型

库文件

动态库

mdd

sqlite3dlld.dll、sqlite3dlld.lib

md

sqlite3dll.dll、sqlite3dll.lib

mtd

sqlite3dllmtd.dll、sqlite3dllmtd.lib

mt

sqlite3dllmt.dll、sqlite3dllmt.lib

静态库

mdd

sqlite3libd.lib

md

sqlite3lib.lib

mtd

sqlite3libmtd.lib

mt

sqlite3libmt.lib

2.2 vs2015编译

        vs2015编译与vs2008相同的,只需要在CMake生成工程时选择vs2015即可,其他版本的vs也是一样的,选择需要使用的vs版本即可,此处只演示一下vs2015的编译。

        因为前面生成过vs2008的工程,需要将build目录设置成cmake-vs2015,再“Configure”选择vs2015即可,其他操作就是一样的了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

binary0010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值