c++ - 如何在没有外部脚本的情况下链接 CMake 和 SQLite?

标签 c++ sqlite cmake

我有以下 CMakeLists:

cmake_minimum_required (VERSION 2.8.12.2)
project (Tutorial)
find_package (sqlite3)
if (SQLITE3_FOUND)
  include_directories(${SQLITE3_INCLUDE_DIRS})
  target_link_libraries (new ${SQLITE3_LIBRARIES})
endif (SQLITE3_FOUND)
add_executable(Tutorial new.cpp)

但是,当我 cmake 时,我收到以下消息:

CMake Warning at CMakeLists.txt:3 (find_package):
  By not providing "Findsqlite3.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "sqlite3", but
  CMake did not find one.

  Could not find a package configuration file provided by "sqlite3" with any
  of the following names:

    sqlite3Config.cmake
    sqlite3-config.cmake

  Add the installation prefix of "sqlite3" to CMAKE_PREFIX_PATH or set
  "sqlite3_DIR" to a directory containing one of the above files.  If
  "sqlite3" provides a separate development package or SDK, be sure it has
  been installed.

我也试过thisthis对于替代的 CMakeLists 文件,但这些都没有用。

我也试过这个,但没用:

FIND_PATH(SQLITE3_INCLUDE_DIR NAMES sqlite3.h)
FIND_LIBRARY(SQLITE3_LIBRARY NAMES sqlite)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SQLITE3 DEFAULT_MSG SQLITE3_LIBRARY SQLITE3_INCLUDE_DIR)
IF(SQLITE3_FOUND)
    SET(SQLITE3_LIBRARIES ${SQLITE3_LIBRARY})
    SET(SQLITE3_INCLUDE_DIRS ${SQLITE3_INCLUDE_DIR})
ELSE(SQLITE3_FOUND)
    SET(SQLITE3_LIBRARIES)
    SET(SQLITE3_INCLUDE_DIRS)
ENDIF(SQLITE3_FOUND)

MARK_AS_ADVANCED(SQLITE3_INCLUDE_DIRS SQLITE3_LIBRARIES)

如何在不使用扩展的情况下链接 SQLite?

谢谢!

最佳答案

基本上你有两个选择:
1) 在项目根目录中名为 cmake 的目录中有一个 FindSQLite3.cmake,如下所示 FindSQLite3.cmake 你已经尝试过,但你需要有类似下面的东西

cmake_minimum_required (VERSION 2.8.12.2)
project (Tutorial)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
add_executable(tutorial new.cpp)
find_package (SQLite3)
if (SQLITE3_FOUND)
  include_directories(${SQLITE3_INCLUDE_DIRS})
  target_link_libraries (tutorial ${SQLITE3_LIBRARIES})
endif (SQLITE3_FOUND)

2) 因为你知道你的 sqlite3 include 目录和库的位置,你可以直接设置它们的路径,在你的 CMakeLists.txt 中你会有类似 link_directories()include_directories(),例如你将有以下几行:

cmake_minimum_required (VERSION 2.8.12.2)
project (Tutorial)
add_executable(tutorial new.cpp)
include_directories(/usr/include)
link_directories(/usr/lib)
target_link_libraries(tutorial sqlite3)

沿着这两个方向的东西应该会起作用。
就个人而言,我会建议第一种方法。

关于c++ - 如何在没有外部脚本的情况下链接 CMake 和 SQLite?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41640029/

相关文章:

c++ - 指向类的指针的C++函数不起作用?

c++ - CMake:外部项目的依赖

cmake - 在cmake中检测项目语言

opencv - 如何在 CMake Makefile 中包含 OpenCV 库

c++ - 为什么 "using namespace std;"被认为是不好的做法?

c++ - 未加载的图像尺寸

android - SQLite在打开数据库时强制关闭

c - 在 C 中使用 SQLite 的 INSERT INTO 时遇到问题

c++ - 用于调试消息的跨平台 GUI 应用程序控制台 C++

python - Flask 数据库可以在开发中使用,但不能在 uWSGI 的生产中使用