c++ - 使用 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)
解决方案
在以用户身份配置构建系统时,请勿使用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)
推荐阅读
- asp.net-mvc - 有谁知道如何在登录视图中在 ASP.NET MVC 中实现记住我?
- transactions - 如何在 PostgreSQL 中使用 CTE 删除重复值?
- java - 在字数旁边映射减少示例
- amazon-web-services - 使用 AWS Cognito 迁移触发器迁移社交账户(Google、Facebook)
- pandas - 如何根据熊猫的条件分组?
- pdf - Mac/Linux 构建之间的 ImageMagick 行为不一致。在 Linux 上损坏的 CMYK 文件
- vuejs3 - 用于 CDN 实现的 Vue3 生产模式
- python - 按分组和大小复制后
- javascript - 如果数组中的所有值都为真(字符串)并且其中一个值为假(字符串),则如何返回布尔值 true 停止使用 Javascript 进行检查
- android - 如何保存exo播放器中每个视频的状态(暂停时间)以便之后恢复