C++ cmake:依赖于另一个库的库(sqlite3pp)
我正在尝试将C++ cmake:依赖于另一个库的库(sqlite3pp),c++,sqlite,cmake,git-submodules,C++,Sqlite,Cmake,Git Submodules,我正在尝试将cmake库链接到我的应用程序,这反过来又取决于sqlite。因此,依赖关系图如下所示: my_app --> sqlite3pp --> sqlite 一个很好的方法是将sqlite放在libs/sqlite3pp/src中,这对于分发来说太笨拙了(我使用的是git子模块) project |___ src # my project |___ libs # libraries | |___ sqlite3pp | | |
cmake
库链接到我的应用程序,这反过来又取决于sqlite
。因此,依赖关系图如下所示:
my_app --> sqlite3pp --> sqlite
一个很好的方法是将sqlite
放在libs/sqlite3pp/src
中,这对于分发来说太笨拙了(我使用的是git子模块)
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子模块
会造成很大的混乱,因为我需要修改子模块。因此,我尝试将目录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) 尝试通过以下行管理项目/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> )
有什么想法吗?要解决链接器错误,请使用Threads
包和CMAKE\u THREAD\u LIBS\u INIT
变量:
find_package(Threads REQUIRED)
target_link_libraries(libsqlite3pp ${CMAKE_THREAD_LIBS_INIT})
有关详细信息,请参见magic!非常感谢。在哪里可以阅读“系统线程库”的含义?
find_package(Threads REQUIRED)
target_link_libraries(libsqlite3pp ${CMAKE_THREAD_LIBS_INIT})