【问题标题】:Build SQLite3 database from cmake从 cmake 构建 SQLite3 数据库
【发布时间】:2021-11-22 21:39:52
【问题描述】:

我有一个项目,其中有 SQL 文件,我希望 cmake/make 为我生成一个 sqlite 数据库。

cmake_minimum_required (VERSION 3.0)

project( home_manager_sqlite )

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

#find sqlite3
find_path(SQLITE3_EXECUTABLE sqlite3)

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

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

add_custom_command(OUTPUT ${LOG_DB_FN}
                        MAIN_DEPENDENCY lbus_log.sql
                        COMMAND cat 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})")

这在某种程度上可行,但是当我进行源代码构建时,找不到 sql 文件。

【问题讨论】:

    标签: sqlite cmake makefile


    【解决方案1】:

    您所说的“非源代码构建”是什么意思?如果你想从build 目录运行 cmake(这通常不会用临时文件污染源树),你应该更喜欢文件的绝对路径,比如

    set(MAIN_DB_FN ${CMAKE_BINARY_DIR}/x.db)
    
    add_custom_command(
      OUTPUT ${MAIN_DB_FN}
      MAIN_DEPENDENCY lbus.sql
      COMMAND sqlite3 ${MAIN_DB_FN} < lbus.sql
      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    )
    

    然后,如果您在源存储库根目录中创建 build 并在那里运行 cmake ..,您将创建 build/x.db。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多