在cmake-on-windows中包含soci

Include soci in cmake on windows

本文关键字:soci 包含 cmake-on-windows      更新时间:2023-10-16

我在JetBrains CLion中有一个HelloWorld项目,并设置了boost,这样我就可以很好地构建它。

我已经设法在HelloWorld项目之外使用cmakemake以及mingw构建了soci

对于我使用的助推:

include(FindBoost)
find_package(Boost 1.55.0 COMPONENTS system filesystem)

如何在cmake中包含soci库?是否有包含soci的类似方法?我不知道从哪里开始?

更新

我想还有一点。

我在cmake选项中添加了以下内容:

-D CMAKE_MODULE_PATH=D:DevelopmentToolslibsoci-3.2.2cmakemodules

这个给我的CMakeLists.txt:

find_package(Soci)
if(${SOCI_FOUND})
  target_link_libraries(HelloWorld ${SOCI_LIBRARY} ${SOCI_sqlite3_PLUGIN})
else()
  message(WARNING "SOCI NOT FOUND")
endif()

虽然我仍然得到SOCI NOT FOUND,但至少soci变量出现在cmake缓存中。

这显然很晚了,但对我来说很有效:

target_link_libraries(HelloWorld soci_core soci_mysql)

我必须承认,我为我的国家伙伴感到羞耻,因为他们为SOCI lib提供了如此糟糕的CMakeLists.txt。为了减轻它们的不良影响,我写了以下关于如何在基于CMake的项目中使用SOCI的内容。我在Linux KDE Neon 5.16.5(基于:Ubuntu 18.04 LTS)上做这件事,但在Windows上可能只有修复路径。这可能会奏效。我不能100%确定,因为我刚开始我的项目,我想使用SOCI。

这显然已经很晚了,但可能奏效了:我这样构建和安装soci:

cmake "/home/szyk/!-EnergoKod/!-Libs/3rdparty/soci" -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu -DCMAKE_BUILD_TYPE=Release
cmake "/home/szyk/!-EnergoKod/!-Libs/3rdparty/soci" -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_PREFIX_PATH=/usr/lib/x86_64-linux-gnu -DCMAKE_BUILD_TYPE=Debug
make -j$(nproc)
sudo make install

我添加到我的项目CMakeLists.txt:

set(SOCI_SOURCE_DIR "$ENV{HOME}/!-EnergoKod/!-Libs/3rdparty/soci")
set(CMAKE_MODULE_PATH ${SOCI_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
set(CMAKE_MODULE_PATH ${SOCI_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
find_package(Soci)
list(APPEND LIBS ${SOCI_LIBRARY} ${SOCI_sqlite3_PLUGIN})
# Link libraries
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBS})

这就是产生好看的输出:

Soci found: Looking for plugins
    * Plugin mysql not found.
    * Plugin odbc not found.
    * Plugin postgresql not found.
    * Plugin sqlite3 found /usr/local/lib/x86_64-linux-gnu/libsoci_sqlite3.so.
Found Soci: /usr/local/include/soci