将 SQLite 与 biicode 一起使用

Use SQLite with biicode

到目前为止,我已经能够使用 biicode 成功使用 boost、cereal 和 gtest,但我在使用 sqlite 时遇到了问题。我正在尝试使用它执行以下操作:

#include <sqlite3.h>

所以我编辑了我的 biicode.conf 以包含这些行,包括 header:

的别名
[requirements]
    sqlite/sqlite:9
[includes]
    sqlite.h: sqlite/sqlite/sqlite3/sqlite3.h

但是当我尝试调用 bii cpp:build 时,它会执行以下操作

WARN: Removing unused reference to "sqlite/sqlite: 9" from myuser/test "requirements"

然后我得到了预期的结果:

database_impl.cpp:(.text+0x516): undefined reference to `sqlite3_exec'

令人惊讶的是,编译成功了,尽管 sqlite3.h 显然不包括在内,但这可能是因为对 sqlite 的调用来自模板函数。

我查看了 example,但 CMakeList.txt 似乎没有添加任何额外的包含目录。例如,为了提升我必须添加:

SET(Boost_USE_STATIC_LIBS OFF)
bii_find_boost(COMPONENTS chrono system filesystem log thread REQUIRED)

target_include_directories(${BII_BLOCK_TARGET} INTERFACE ${Boost_INCLUDE_DIRS})
target_link_libraries(${BII_BLOCK_TARGET} INTERFACE ${Boost_LIBRARIES})

但是我发现的两个示例 here and here 似乎没有向包含目录添加任何内容,甚至 link 文件夹也没有。我想 sqlite 必须使用您的源代码进行编译,那么如何让 biicode 自动将这些文件添加到我的项目中?

有几个问题。您刚刚在 [includes] 部分 sqlite.h 而不是 sqlite3.h 中编写,您应该只写前缀 sqlite/sqlite/sqlite3,而不是完整的依赖项名称。

那么,你可以这样解决:

[requirements]
    sqlite/sqlite: 9
[includes]
    sqlite3.h: sqlite/sqlite/sqlite3

或者,您可以尝试上传到 fenix 用户的 SQLite 版本:

[requirements]
    fenix/sqlite: 0
[includes]
    sqlite3.h: fenix/sqlite

不用担心 "WARN" 消息说 biicode 正在忽略 sqlite3.c 文件,因为它被硬编码到块 CMakeLists.txt 中以捕获此文件 ;)

注意:你应该用双引号而不是 <> 来写你的外部 #includes,因为最后一个引用系统头文件和biicode 可能正在使用某些系统依赖,而您没有意识到。