2017-01-13 1 views
3

У меня есть следующие CMakeLists:Как я могу связать CMake и SQLite без внешнего скрипта?

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. 

Я также попытался this и this альтернативных 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 без расширения?

Спасибо!

ответ

3

У вас есть два основных варианта:
1) имеют FindSQLite3.cmake в директории под названием 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 включает в себя каталог и библиотеку, которые вы можете прямо установить для них, в вашем 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) 

Что-то в этих двух направлениях должно работать.
Лично я бы предложил первый подход.

 Смежные вопросы

  • Нет связанных вопросов^_^