You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CMake构建SQLite3数据库时源码外构建找不到SQL文件如何解决

问题原因

源码外构建时,CMake执行自定义命令的默认工作目录是构建目录,你当前配置中所有SQL文件都使用相对路径引用,程序会到构建目录下查找对应文件,和实际SQL文件所在的源码目录不匹配,因此报错找不到文件。

修复方法

使用CMake内置变量CMAKE_CURRENT_SOURCE_DIR(该变量值为当前CMakeLists.txt所在的源码目录绝对路径)拼接SQL文件路径,所有引用SQL源文件的位置都替换为带前缀的绝对路径即可。
另外你当前配置中查找sqlite3可执行文件误用了find_path,该指令用于查找头文件/目录,查找可执行文件应该用find_program,也可以同步修正。

修正后的完整配置代码

cmake_minimum_required (VERSION 3.0)

project( home_manager_sqlite )

message("Prefix is: ${CMAKE_INSTALL_PREFIX}")

# 修正:查找可执行文件用find_program
find_program(SQLITE3_EXECUTABLE sqlite3)

add_custom_target(main_sqlite ALL DEPENDS ${MAIN_DB_FN} SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/lbus.sql)
add_custom_target(log_sqlite ALL DEPENDS ${LOG_DB_FN} SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/lbus_log.sql)

add_custom_command(OUTPUT ${MAIN_DB_FN}
                        MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/lbus.sql
                        COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/lbus.sql | sqlite3 -batch ${MAIN_DB_FN})

add_custom_command(OUTPUT ${LOG_DB_FN}
                        MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/lbus_log.sql
                        COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/lbus_log.sql | sqlite3 -batch ${LOG_DB_FN})

install (FILES ${MAIN_DB_FN}
            DESTINATION ${DB_INSTALL_DIR}
            RENAME ${MAIN_DB_FN}.sample
            PERMISSIONS OWNER_WRITE OWNER_READ
                GROUP_READ GROUP_WRITE
                WORLD_READ)

install (FILES ${LOG_DB_FN}
            DESTINATION ${DB_INSTALL_DIR}
            RENAME ${LOG_DB_FN}.sample
            PERMISSIONS OWNER_WRITE OWNER_READ
                GROUP_READ GROUP_WRITE
                WORLD_READ)

install (CODE "execute_process(COMMAND chown -R ${WWW_OWNER} ${CMAKE_INSTALL_PREFIX}/${DB_INSTALL_DIR})")

内容的提问来源于stack exchange,提问作者Lev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:36:04