【问题标题】:CMAKE + SQLite3.dllCMAKE + SQLite3.dll
【发布时间】:2020-11-28 13:34:45
【问题描述】:

有人知道如何使用 CMAKE 将 SQLite3.dll 复制到可执行目录中吗?我可以在生成的 VS 项目中使用 sqlite,但是当我尝试运行 exe 时找不到 dll。

我猜测 CMAKE 会在 VS 项目设置中的构建后事件中写入复制命令吗?但是如何通过 CMAKE 完成。

cmake_minimum_required(VERSION 3.10)
add_executable(APP)
target_sources(APP 
                PRIVATE
                    include/box.hpp
                    src/box.cpp
                    src/main.cpp
                )       
target_include_directories(APP PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)                    


# SQlite
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/Modules)
set(SQLite3_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../external/sqlite3/include)
set(SQLite3_LIBRARY ${CMAKE_CURRENT_SOURCE_DIR}/../external/sqlite3/libraries/win10/x64)
find_package (SQLite3)
if (SQLITE3_FOUND)
  include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../external/sqlite3/include)
  list(APPEND EXTRA_LIBS ${CMAKE_CURRENT_SOURCE_DIR}/../external/sqlite3/libraries/win10/x64/sqlite3.lib)
endif (SQLITE3_FOUND)



list(APPEND EXTRA_LIBS LIBCORE)
list(APPEND EXTRA_LIBS Boost::filesystem)
target_link_libraries(APP PRIVATE ${EXTRA_LIBS})




# INSTALL

install(TARGETS APP DESTINATION ${PROJECT_BINARY_DIR}/TEMP/bin)

【问题讨论】:

标签: c++ sqlite cmake


【解决方案1】:

可以在CMakeLists.txt中使用cmake作为工具,它具有文件复制功能

这样的事情可能是一个开始

set(source_file  "D:/temp/from/sqlite3.dll")
set(target_file "D:\\temp\\to\\sqlite3.dll")
execute_process( COMMAND  ${CMAKE_COMMAND} -E copy_if_different "${source_file}" "${target_file}" RESULT_VARIABLE sResult )

CMake tutorial

【讨论】:

  • 我得到了这个工作,但不确定它是否被推荐file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../external/sqlite3-x64/sqlite3.dll DESTINATION ${CMAKE_BINARY_DIR}/proj/Debug) file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../external/sqlite3-x64/sqlite3.dll DESTINATION ${CMAKE_BINARY_DIR}/proj/Release)
  • 这也可以,与我的回答几乎相同,只是另一个命令。您可以做的是对其进行一些扩展并在复制之前检查文件sqlite3.dll 是否存在于目标目录中。如果没有找到则复制,如果存在则跳过复制
  • 啊,好的,很高兴知道。你使用过文件(GET_RUNTIME_DEPENDENCIES 吗?当我尝试按照描述使用它时,我一直收到错误消息。但这似乎是推荐的方式。
  • 不,我没有使用 GET_RUNTIME_DEPENDENCIES。一个建议是,您始终需要知道需要什么,并且可以手动完成。永远不要相信工具为你做事。首先自己动手,如果你知道如何使用工具来节省时间,但你必须知道。如果有问题并且你不知道需要什么,那么你就是“无人区”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多