cmake: библиотека зависит от другой библиотеки (sqlite3pp)

Я пытаюсь связаться с cmake sqlite3pp библиотека для моего приложения, которое, в свою очередь, зависит от sqlite, Итак, график зависимости следующий:

my_app  --> sqlite3pp  --> sqlite

Уловка, которая работает хорошо, но слишком неуклюжа для распространения (я использую git submodule), это поставить sqlite внутри libs/sqlite3pp/src:

project
|___ src    # my project
|___ libs   # libraries
|      |___ sqlite3pp
|      |        |___ src
|      |              |___sqlite   # I copy it here; clumsy  :-(
...    ...

Со следующей строкой в sqlite3pp/src/CMakeLists.txt:

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/sqlite3")

Однако с git submodule это создает большой беспорядок, так как мне нужно изменить подмодуль. Поэтому я пытаюсь вытащить каталог sqlite два уровня вверх, в libs каталог:

project
|___ src    # my project
|___ libs   # libraries
|      |___ sqlite3pp
|               |___ src
|
|___ sqlite   # Now it looks better
...    ...

Теперь два подхода, которые я попробовал, не сработали (я очень новичок в cmake):

1) когда я заменяю вышеприведенное утверждение

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../sqlite3")

cmake не распознает относительный путь.

2) Попытка управлять ссылками из project/CMakeLists.txt подать следующие строки:

set(sqlite_path "${CMAKE_CURRENT_SOURCE_DIR}/libs/sqlite")
include_directories(sqlite_path)
add_subdirectory( sqlite_path )
add_library(sqlite3 STATIC "${CMAKE_CURRENT_SOURCE_DIR}/libs/sqlite/sqlite3.c")

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/libs/sqlite3pp/src")
add_subdirectory("libs/sqlite3pp/src")TARGET_LINK_LIBRARIES(sqlite3pp "${CMAKE_CURRENT_SOURCE_DIR}/libs/sqlite/sqlite3.c" )
target_include_directories( sqlite3pp PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/libs/sqlite> )

приводит к ситуации, когда cmake выглядит успешно, но в make после успешной компиляции обеих библиотек, связывая их с проектом, я получаю кучу ошибок ‘undefined reference’:

linking CXX executable ../../bin/myapp-1.0.0/myapp
../libs/sqlite3pp/src/libsqlite3pp.so: undefined reference to `pthread_mutex_trylock'
...

Есть идеи?

0

Решение

Для устранения ошибок компоновщика используйте Threads пакет и CMAKE_THREAD_LIBS_INIT переменная из него:

find_package(Threads REQUIRED)
target_link_libraries(libsqlite3pp ${CMAKE_THREAD_LIBS_INIT})

Увидеть FindThreads для деталей

2

Другие решения


По вопросам рекламы [email protected]