我的 C 檔案包括以下 mariadb/mysql.h。
#include <mariadb/mysql.h>
我編譯我的 C 檔案如下。
g -std=c 2a -g main.cpp -o main -lmariadbclient
它作業正常。但是如果我想使用 CMakeLists.txt 編譯我的 C 檔案。如何-lmariadbclient使用 CMake 編譯 C 源代碼?
uj5u.com熱心網友回復:
看起來主要發行版附帶了一個名為“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)
uj5u.com熱心網友回復:
在主 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
)
在與 main 相同的目錄下CMakeLists.txt,創建目錄cmake-modules并在目錄中創建FindMariaDBClient.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})
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496787.html
