前言
虽然操作数据库持久层c++不是c++擅长的领域,但是c++也有一些orm库,之前用过轻量级的sqlite-orm, 今天试试重量级libodb
一、配置方法
依旧是使用vcpkg的manifest配置。
命令行输入: vcpkg add port libodb-sqlite
, 输入后vcpkg.json自动添加了该库(当然自己在这文件里输入库名是一样的)。保存下cmakelists.txt, 开始自动下载源码编译。
二、Link failure
1.find_package
错误写法:
find_package(odb CONFIG REQUIRED)
target_link_libraries(main PRIVATE odb::libodb-sqlite)
之前一直向上面这样链接库,没有出现这种错误,我很确信是写错了,因为使用绝对路径直接链接库是可以构建项目的。
网上搜索了一阵没发现,然后去vcpkg 项目下的issue搜索一下果然有人遇到一样的错误。
vcpkg libodb Link failure
要明确指定使用的components。
具体有哪些components可以看share文件夹下该库的.cmake文件
add_compile_definitions(DATABASE_SQLITE)
find_package(odb CONFIG REQUIRED COMPONENTS libodb sqlite )
target_link_libraries(${PROJECT_NAME} PUBLIC odb::libodb odb::libodb-sqlite)
2.编译
编译examples里的项目发现不能直接编译。xxx-odb.hxx xxx-odb.cxx是没有的,libodb是通过预编译生成额外文件的方式来映射的。官网下载预编译器odb-2.4.0-i686-windows
使用方法就不额外介绍了,网上资料很多,编译选项。
c++xx 的选项为--std c++xx
总结
很重的一个orm库,学习成本高, 还是其他语言来搞吧