sqlite数据库cmakelist.txt编译

1、下载官方源码

源码地址

wget https://sqlite.org/2026/sqlite-autoconf-3510200.tar.gz

tar -xvf sqlite-autoconf-3510200.tar.gz

cd sqlite-autoconf-3510200

2、创建CMakeLists.txt

gedit CMakeLists.txt

cpp 复制代码
cmake_minimum_required(VERSION 3.10)
project(sqlite3 C)

# ---------------- Options ----------------
option(SQLITE_BUILD_STATIC "Build static sqlite3 library" ON)
option(SQLITE_BUILD_SHARED "Build shared sqlite3 library" ON)

option(SQLITE_ENABLE_FTS5  "Enable FTS5 extension" ON)
option(SQLITE_ENABLE_JSON1 "Enable JSON1 extension" ON)

# ---------------- Source ----------------
set(SQLITE_SRC
    sqlite3.c
)

set(SQLITE_PUBLIC_HEADERS
    sqlite3.h
)

# ---------------- Compile Definitions ----------------
set(SQLITE_DEFINES
    SQLITE_THREADSAFE=1
)

if(SQLITE_ENABLE_FTS5)
    list(APPEND SQLITE_DEFINES SQLITE_ENABLE_FTS5)
endif()

if(SQLITE_ENABLE_JSON1)
    list(APPEND SQLITE_DEFINES SQLITE_ENABLE_JSON1)
endif()

# ---------------- Static Library ----------------
if(SQLITE_BUILD_STATIC)
    add_library(sqlite3_static STATIC ${SQLITE_SRC})
    target_compile_definitions(sqlite3_static PRIVATE ${SQLITE_DEFINES})
    target_include_directories(sqlite3_static PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
    set_target_properties(sqlite3_static PROPERTIES
        OUTPUT_NAME sqlite3
        POSITION_INDEPENDENT_CODE ON
    )
endif()

# ---------------- Shared Library ----------------
if(SQLITE_BUILD_SHARED)
    add_library(sqlite3_shared SHARED ${SQLITE_SRC})
    target_compile_definitions(sqlite3_shared PRIVATE ${SQLITE_DEFINES})
    target_include_directories(sqlite3_shared PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
    set_target_properties(sqlite3_shared PROPERTIES
        OUTPUT_NAME sqlite3
        VERSION 3
        SOVERSION 3
    )
endif()

# ---------------- Install ----------------
install(FILES ${SQLITE_PUBLIC_HEADERS}
        DESTINATION include)

if(SQLITE_BUILD_STATIC)
    install(TARGETS sqlite3_static
            ARCHIVE DESTINATION lib)
endif()

if(SQLITE_BUILD_SHARED)
    install(TARGETS sqlite3_shared
            LIBRARY DESTINATION lib
            RUNTIME DESTINATION bin)
endif()

3、创建build.sh

bash 复制代码
#!/bin/bash
set -e

MODE=${1:-linux}
LIBTYPE=${2:-both}     # static | shared | both
BUILD_TYPE=Release
JOBS=$(nproc)

ROOT_DIR=$(pwd)
INSTALL_ROOT=${ROOT_DIR}/install

ANDROID_NDK=${ANDROID_NDK:-$HOME/android-sdk/ndk/26.2.11394342}
ANDROID_ABI=arm64-v8a
ANDROID_API=33

# -------- lib type switch --------
SQLITE_BUILD_STATIC=OFF
SQLITE_BUILD_SHARED=OFF

case ${LIBTYPE} in
    static)
        SQLITE_BUILD_STATIC=ON
        ;;
    shared)
        SQLITE_BUILD_SHARED=ON
        ;;
    both)
        SQLITE_BUILD_STATIC=ON
        SQLITE_BUILD_SHARED=ON
        ;;
    *)
        echo "Invalid lib type: ${LIBTYPE}"
        echo "Usage: $0 [linux|android] [static|shared|both]"
        exit 1
        ;;
esac

build_linux() {
    echo "==== Build sqlite3 for Linux (${LIBTYPE}) ===="

    rm -rf build_linux
    mkdir build_linux
    cd build_linux

    cmake .. \
        -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
        -DCMAKE_INSTALL_PREFIX=${INSTALL_ROOT}/linux \
        -DSQLITE_BUILD_STATIC=${SQLITE_BUILD_STATIC} \
        -DSQLITE_BUILD_SHARED=${SQLITE_BUILD_SHARED} \
        -DSQLITE_ENABLE_FTS5=ON \
        -DSQLITE_ENABLE_JSON1=ON

    make -j${JOBS}
    make install
}

build_android() {
    echo "==== Build sqlite3 for Android (${LIBTYPE}) ===="

    rm -rf build_android
    mkdir build_android
    cd build_android

    cmake .. \
        -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
        -DANDROID_ABI=${ANDROID_ABI} \
        -DANDROID_PLATFORM=android-${ANDROID_API} \
        -DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
        -DCMAKE_INSTALL_PREFIX=${INSTALL_ROOT}/android/${ANDROID_ABI} \
        -DSQLITE_BUILD_STATIC=${SQLITE_BUILD_STATIC} \
        -DSQLITE_BUILD_SHARED=${SQLITE_BUILD_SHARED} \
        -DSQLITE_ENABLE_FTS5=ON \
        -DSQLITE_ENABLE_JSON1=ON

    make -j${JOBS}
    make install
}

case ${MODE} in
    linux)
        build_linux
        ;;
    android)
        build_android
        ;;
    *)
        echo "Usage: $0 [linux|android] [static|shared|both]"
        exit 1
        ;;
esac

4、编译动态与静态库

编译linux环境 动态库和静态库

sh ./build_sqlite3.sh linux

编译linux环境 动态库

sh ./build_sqlite3.sh linux shared

编译linux环境 静态库

sh ./build_sqlite3.sh linux static

编译android环境 动态库和静态库

sh ./build_sqlite3.sh android

编译android环境 动态库

sh ./build_sqlite3.sh android shared

编译android环境 静态库

sh ./build_sqlite3.sh android static

相关推荐
YOU OU2 小时前
Redis基础常识与命令
数据库·redis·缓存
Database_Cool_4 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
爱写代码的阿森4 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
Database_Cool_5 小时前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
姜太小白5 小时前
【MySQL】 索引优化实战:解决 WHERE 等值 + IS NULL 查询,TEXT 字段报错 1167 的完整指南
数据库·mysql
窝子面6 小时前
手搓最简前后端协作-node
javascript·数据库
吳所畏惧6 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈6 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HPFBoy6 小时前
log4net 数据库存日志正确配置
数据库