在GitHub Codespaces中通过CMake编译集成SQLite3的C++项目遇阻求助
解决CMake集成SQLite3的编译问题
当前CMake配置的核心问题
你的配置存在几个关键错误,导致了找不到包和未定义引用的问题:
- 混用了
unofficial-sqlite3(这是vcpkg专属包,未配置vcpkg时必然找不到) - 错误引用Windows平台的
sqlite3.dll,Linux环境下应链接sqlite3库 target_link_libraries中错误使用main作为目标(你的可执行文件是game)- 重复配置include目录和链接库,导致配置冲突
下面给出两种可行方案,选择其一即可:
方案1:使用系统预装的SQLite3(推荐)
GitHub Codespaces已预装SQLite,且你已安装libsqlite3-dev,直接使用系统库最省心:
完整CMakeLists.txt配置
cmake_minimum_required(VERSION 3.10) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build) # 项目名称和版本 project(game VERSION 0.1) # 收集源码文件 file(GLOB_RECURSE SRC_FILES src/*.cpp) add_executable(game main.cpp ${SRC_FILES}) # 包含自身项目的头文件目录 target_include_directories(game PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) # 集成系统SQLite3 find_package(SQLite3 REQUIRED) target_include_directories(game PUBLIC ${SQLite3_INCLUDE_DIRS}) target_link_libraries(game PUBLIC ${SQLite3_LIBRARIES}) # 保留Catch2集成的相关配置(如果之前有效,直接加在这里即可)
验证步骤
- 删除旧编译缓存:
rm -rf build - 创建并进入新编译目录:
mkdir build && cd build - 执行CMake配置:
cmake .. - 编译项目:
make
方案2:使用项目内的本地SQLite文件
如果你想依赖自己项目debug/sqlite下的文件,按以下配置:
完整CMakeLists.txt配置
cmake_minimum_required(VERSION 3.10) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/build) # 项目名称和版本 project(game VERSION 0.1) # 收集源码文件 file(GLOB_RECURSE SRC_FILES src/*.cpp) add_executable(game main.cpp ${SRC_FILES}) # 包含自身项目的头文件目录 target_include_directories(game PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) # 集成本地SQLite3 target_include_directories(game PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/debug/sqlite/include) # 将本地sqlite3.c加入编译流程 target_sources(game PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/debug/sqlite/include/sqlite3.c) # Linux下编译SQLite需要额外链接系统库 target_link_libraries(game PUBLIC pthread dl)
额外注意事项
- 代码中引用SQLite头文件时,必须写
#include <sqlite3.h>,而非sqlite.h,否则会出现头文件找不到的问题 - 每次修改CMake配置后,务必清理旧的
build目录,避免缓存的错误配置干扰编译 - 使用方案1时,可通过
dpkg -l | grep libsqlite3-dev命令验证libsqlite3-dev是否安装成功
内容的提问来源于stack exchange,提问作者Rulz
相关产品推荐
相关产品推荐

