繁体   English   中英

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

[英]How to compile C++ with CMake and -L/usr/include/mariadb/mysql -lmariadbclient

我的 C++ 文件包括以下 mariadb/mysql.h。

#include <mariadb/mysql.h>

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

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

它工作正常。 但是如果我想使用 CMakeLists.txt 编译我的 C++ 文件。 如何使用 CMake 编译带有-lmariadbclient的 C++ 源代码?

看起来主要发行版附带了一个名为“mysqlclient.pc”的 mariadb 的 pkg-config 文件。

所以你可以这样做:

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

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

target_link_libraries(my_program PUBLIC PkgConfig::mariadb)

在主 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并在cmake-modules目录中创建文件FindMariaDBClient.cmake

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM