【发布时间】:2015-04-18 01:27:24
【问题描述】:
我正在尝试将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成功编译两个库后,将它们链接到项目时,我收到一堆“未定义引用”错误:
linking CXX executable ../../bin/myapp-1.0.0/myapp
../libs/sqlite3pp/src/libsqlite3pp.so: undefined reference to `pthread_mutex_trylock'
...
有什么想法吗?
【问题讨论】:
标签: c++ sqlite cmake git-submodules