使用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
相关产品推荐
相关产品推荐

