将SQLite与biicode一起使用



到目前为止,我已经能够使用biicode成功地使用boost、grain和gtest,但我在sqlite方面遇到了问题。我正在尝试使用它做以下事情:

#include <sqlite3.h>

所以我编辑了我的biicode.conf以包括这些行,包括标题的alising:

[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的调用来自模板函数。

我看过这个例子,但CMakeList.txt似乎没有添加任何额外的include目录。举个例子,我不得不添加:

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})

但是我在这里和这里找到的两个例子似乎没有向includes目录添加任何内容,甚至没有添加链接文件夹。我想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

不要担心一条"警告"消息说biicode忽略sqlite3.c文件,因为它被硬编码到块CMakeLists.txt中以捕获该文件;)

注意:您应该用双引号而不是<>来写外部#includes,因为最后一个引号是指系统头,biicode可能使用了一些系统dep,但您没有意识到。

最新更新