首页 > 解决方案 > 使用 Cmake 链接休息床

问题描述

在尝试将 restbed 与 CMake 链接时,我得到了通常的未定义函数错误。但是,尝试与链接的完全相同的代码g++ test.cpp -o test -lrestbed可以正常工作。

此外,当我第一次实现 CMakeLists.txt 时,它也运行良好,当我添加到项目中时,它开始面临问题。现在甚至没有定义单个休息床功能。

我的休息床包括位于/usr/local/include和要链接的共享对象/usr/local/lib。相当标准的位置。

CMakeLists.txt

cmake_minimum_required(VERSION 3.0)
project(vcar-server)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -lrestbed")

file(GLOB CXX_EXEC "src/*.cpp")

add_subdirectory(vcar-embedded)

add_executable(vcar-server ${CXX_EXEC})
target_link_libraries(vcar-server vcar)

标签: c++cmakerestbed

解决方案


在以用户身份配置构建系统时,请勿使用CMAKE_CXX_FLAGS,或者将其用作“最后的手段”。更喜欢使用对象模型代替全局变量。现代的 cmake 方式很可能是这样的:

cmake_minimum_required(VERSION 3.11)
project(vcar-server)
add_subdirectory(vcar-embedded)
find_package(Threads REQUIRED)
add_executable(vcar-server ${cxx_exec})
target_link_libraries(vcar-server PUBLIC vcar restbed Threads::Threads)
set_target_properties(vcar-server PUBLIC CXX_STANDARD 20)

推荐阅读