如何编译C++使用cmake和-l/usr/include/mariadb/mysql -lmariadbclient

发布于 2025-02-11 08:24:46 字数 292 浏览 1 评论 0原文

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

#include <mariadb/mysql.h>

我将C ++文件编译如下。

g++ -std=c++2a -g main.cpp -o main -lmariadbclient

它可以正常工作。但是,如果我想使用cmakelists.txt编译我的C ++文件。如何使用cmake将C ++源代码与-lmariaDbClient编译?

My C++ file includes the mariadb/mysql.h as following.

#include <mariadb/mysql.h>

I compile my C++ file as following.

g++ -std=c++2a -g main.cpp -o main -lmariadbclient

It works fine. But if I want to compile my C++ file using CMakeLists.txt. How to compile the C++ source code with -lmariadbclient using CMake?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

后知后觉 2025-02-18 08:24:46

看起来像Mariadb的PKG-Config文件一样,称为“ mysqlclient.pc”。

因此,您可以

find_package(FindPkgConfig REQUIRED)
pkg_check_modules(mariadb REQUIRED IMPORTED_TARGET "mysqlclient")

这样做:然后将其链接到您的程序:

target_link_libraries(my_program PUBLIC PkgConfig::mariadb)

It looks like major distros ship with a pkg-config file for mariadb called "mysqlclient.pc".

So you can do:

find_package(FindPkgConfig REQUIRED)
pkg_check_modules(mariadb REQUIRED IMPORTED_TARGET "mysqlclient")

and then link it to your program like so:

target_link_libraries(my_program PUBLIC PkgConfig::mariadb)
意中人 2025-02-18 08:24:46

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

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并创建文件findmariaiadbclient.cmake.cmake > cmake-modules目录。

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

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})

Add the following in the main CMakeLists.txt.

list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules")

find_package(MariaDBClient REQUIRED)

target_link_libraries(
    your_project_name
    MariaDBClient::MariaDBClient
)

In the same directory as the main CMakeLists.txt, create the directory cmake-modules and create the file FindMariaDBClient.cmake in the cmake-modules directory.

Add the following in the FindMariaDBClient.cmake file.

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})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文