CMake 库在被其他项目使用时无法正确链接

问题描述 投票:0回答:1

我是 CMake 和 C++ 初学者,正在尝试创建一个基于 C++ 的 MQTT 客户端库。我的库依赖于另外两个库,

PahoMqttCpp::paho-mqtpp3
nlohmann_json::nlohmann_json

在这两个库中,我希望 json 库能够

PUBLIC
链接,因为 json-objects 是客户端 API 的一部分。另一方面,我不希望项目的用户访问或修改我正在使用的内部
PahoMqttCpp
客户端,因此我想私下链接它(如果我正确理解
PUBLIC
PRIVATE
链接)。

这是我的

CMakeLists.txt
的粗略娱乐:

# ...Project and library initialization

find_package(PahoMqttCpp REQUIRED)
find_package(nlohmann_json REQUIRED)

target_link_libraries(MQTTClient
        PRIVATE PahoMqttCpp::paho-mqttpp3
        PUBLIC nlohmann_json::nlohmann_json
)

include(GNUInstallDirs)

install(TARGETS MQTTClient
        EXPORT MQTTClientTargets
        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
        ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
        INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(EXPORT MQTTClientTargets
        FILE MQTTClientTargets.cmake
        NAMESPACE MQTTClient::
        DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MQTTClient
)

include(CMakePackageConfigHelpers)
configure_package_config_file(
        cmake/MQTTClientConfig.cmake.in
        ${CMAKE_CURRENT_BINARY_DIR}/WaraPSClientConfig.cmake
        INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/WaraPSClient
)

write_basic_package_version_file(
        MQTTClientConfigVersion.cmake
        VERSION ${PROJECT_VERSION}
        COMPATIBILITY AnyNewerVersion
)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/MQTTClientConfig.cmake
        ${CMAKE_CURRENT_BINARY_DIR}/MQTTClientConfigVersion.cmake
        DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MQTTClient
)

还有一个非常基本的

MQTTClientConfig.cmake.in
文件。这可以正确构建和链接,并且我可以使用 cmake 安装该库,但是,当我尝试在另一个带有
CMakeLists.txt
的项目中使用它时,如下所示:

cmake_minimum_required(VERSION 3.7...3.29)

project(Test)

add_executable(Test src/main.cc)

find_package(MQTTClient)
target_link_libraries(Test MQTTClient)

尝试链接可执行文件时出现以下错误:

/usr/bin/ld: /usr/local/lib/libMQTTClient.so: undefined reference to `mqtt::properties::properties()'
collect2: error: ld returned 1 exit status
gmake[2]: *** [CMakeFiles/Test.dir/build.make:97: Test] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/Test.dir/all] Error 2
gmake: *** [Makefile:91: all] Error 2

我一生都无法弄清楚为什么这不起作用,我在两天的大部分时间里都被这个错误困扰,任何帮助将不胜感激。

c++ cmake mqtt pahocpp
1个回答
0
投票

我在一段时间后设法解决了这个问题,问题与 CMake 无关,而是源于错误的

apt
下载。从头开始重新安装 mqtt 库后,我成功地编译了所有内容。

© www.soinside.com 2019 - 2024. All rights reserved.