到目前为止,我已经能够使用biicode成功使用boost,grain和gtest,但是我在使用sqlite时遇到了麻烦。我正在尝试使用它执行以下操作:
#include <sqlite3.h>
因此,我编辑了biicode.conf以包含这些行,包括标题的别名:
[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似乎没有添加任何其他包含目录。例如,对于boost,我必须添加:
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和here似乎都没有向包含目录添加任何内容,甚至没有向链接文件夹添加任何内容。我认为sqlite必须与您的源一起编译,那么如何使biicode自动将这些文件添加到我的项目中?
最佳答案
有几个问题。您只是在[includes]
部分的sqlite.h
中而不是在sqlite3.h
中编写,并且以后应该只写前缀sqlite/sqlite/sqlite3
,而不是完整的依赖项名称。
然后,您可以解决此问题:
[requirements]
sqlite/sqlite: 9
[includes]
sqlite3.h: sqlite/sqlite/sqlite3
或者,您可以尝试将SQLite版本上传到fenix用户:
[requirements]
fenix/sqlite: 0
[includes]
sqlite3.h: fenix/sqlite
不用担心“ WARN”消息说biicode会忽略sqlite3.c文件,因为它被编码到CMakeLists.txt块中以捕获该文件;)
注意:您应该用双引号而不是
#includes
来写外部<>
,因为最后一个引用到系统头,并且biicode可能使用某些系统deps,但您没有意识到。
关于sqlite - 将SQLite与biicode一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28644907/