首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用C++和-L/usr/ CMake /mariadb/mysql -lmariadbclient编译CMake

问如何用C++和-L/usr/ CMake /mariadb/mysql -lmariadbclient编译CMake
EN

Stack Overflow用户
提问于 2022-06-28 12:07:09
回答 2查看 110关注 0票数 0

我的C++文件包括mariadb/mysql.h,如下所示。

代码语言:javascript
复制
#include <mariadb/mysql.h>

我按以下方式编译了我的C++文件。

代码语言:javascript
复制
g++ -std=c++2a -g main.cpp -o main -lmariadbclient

效果很好。但是如果我想使用C++编译我的CMakeLists.txt文件。如何使用C++用-lmariadbclient编译CMake源代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-28 13:06:21

它看起来像主要的发行版,带有一个名为"mysqlclient.pc“的mariadb的pkg-config文件。

所以你可以:

代码语言:javascript
复制
find_package(FindPkgConfig REQUIRED)
pkg_check_modules(mariadb REQUIRED IMPORTED_TARGET "mysqlclient")

然后将其链接到程序,如下所示:

代码语言:javascript
复制
target_link_libraries(my_program PUBLIC PkgConfig::mariadb)
票数 1
EN

Stack Overflow用户

发布于 2022-06-28 13:08:20

在主CMakeLists.txt中添加以下内容。

代码语言:javascript
复制
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules")

find_package(MariaDBClient REQUIRED)

target_link_libraries(
    your_project_name
    MariaDBClient::MariaDBClient
)

在与主CMakeLists.txt相同的目录中,创建目录cmake-modules,并在cmake-modules目录中创建文件FindMariaDBClient.cmake。

在FindMariaDBClient.cmake文件中添加以下内容。

代码语言:javascript
复制
find_path(MariaDBClient_INCLUDE_DIR NAMES mysql.h PATH_SUFFIXES mariadb mysql)

set(BAK_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX})
find_library(MariaDBClient_LIBRARY
    NAMES mariadb libmariadb mariadbclient libmariadbclient mysqlclient 
    libmysqlclient
    PATH_SUFFIXES mariadb mysql
)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${BAK_CMAKE_FIND_LIBRARY_SUFFIXES})

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MariaDBClient DEFAULT_MSG 
MariaDBClient_LIBRARY MariaDBClient_INCLUDE_DIR)

if(MariaDBClient_FOUND)
    if(NOT TARGET MariaDBClient::MariaDBClient)
        add_library(MariaDBClient::MariaDBClient UNKNOWN IMPORTED)
        set_target_properties(MariaDBClient::MariaDBClient PROPERTIES
            INTERFACE_INCLUDE_DIRECTORIES "${MariaDBClient_INCLUDE_DIR}"
            IMPORTED_LOCATION "${MariaDBClient_LIBRARY}")
    endif()
endif()

mark_as_advanced(MariaDBClient_INCLUDE_DIR MariaDBClient_LIBRARY)

set(MariaDBClient_LIBRARIES ${MariaDBClient_LIBRARY})
set(MariaDBClient_INCLUDE_DIRS ${MariaDBClient_INCLUDE_DIR})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72786137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档