我正在尝试使用我的项目中的add_subdirectory(external/mariadb-connector-c)将mariadb客户端库构建为一个子模块。当我构建独立的mariadb客户端时,一切都很好,但是这个解决方案意味着我必须直接链接预先构建的二进制文件。我希望避免这种两步构建过程,但当我试图从我的项目中运行cmake时,我得到了许多与mariadb插件相关的错误:
CMake Error at external/mariadb-connector-c/cmake/install_plugins.cmake:11 (INSTALL):
INSTALL TARGETS given no LIBRARY DESTINATION for module target
"client_ed25519".
Call Stack (most recent call first):
external/mariadb-connector-c/cmake/plugins.cmake:82 (INSTALL_PLUGIN)
external/mariadb-connector-c/plugins/auth/CMakeLists.txt:54 (REGISTER_PLUGIN)
external/mariadb-connector-c/plugins/CMakeLists.txt:7 (INCLUDE)
external/mariadb-connector-c/CMakeLists.txt:403 (INCLUDE)在这里,external/mariadb-connector-c被注册为我的项目存储库中的一个git子模块。有没有办法将mariadb客户端库作为一个子模块嵌入,通过从我的根项目运行CMake来使其工作,或者我必须将其构建为一个独立的项目?
发布于 2020-10-14 15:55:39
它也不适用于我(linux,cmake-3.10)
我必须至少设置SET(INSTALL_PLUGIN x)以避免cmake错误。
下面是我的最小工作示例:
# file CMakeLists.txt
PROJECT(my_connector_info)
SET(INSTALL_PLUGINDIR ${CMAKE_BINARY_DIR}) # needed by mariadb-connector-c
add_subdirectory(libs/mariadb-connector-c-3.1.10-src EXCLUDE_FROM_ALL)
add_executable(${PROJECT_NAME} my_connector_info.c)
target_link_libraries(${PROJECT_NAME} mariadbclient)
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE ${CMAKE_SOURCE_DIR}/libs/mariadb-connector-c-3.1.10-src/include)
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE ${CMAKE_BINARY_DIR}/libs/mariadb-connector-c-3.1.10-src/include)/* file my_connector_info.c */
#include <stdio.h>
#include <mysql.h>
int main()
{
printf("info: %s\n", mysql_get_client_info());
return 0;
}下面是如何构建它的:
#!/bin/sh
set -eux
(
mkdir -p libs
cd libs
test -e mariadb-connector-c-3.1.10-src.tar.gz || wget https://dlm.mariadb.com/1157459/Connectors/c/connector-c-3.1.10/mariadb-connector-c-3.1.10-src.tar.gz
test -d mariadb-connector-c-3.1.10-src || tar -xzf mariadb-connector-c-3.1.10-src.tar.gz
cd -
)
mkdir -p build
cd build
cmake ..
make
./my_connector_infoMy_connector_info的输出:
info: 10.5.5https://stackoverflow.com/questions/61047894
复制相似问题