news 2026/4/16 3:39:59

C++—集群聊天室(3)CMake详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++—集群聊天室(3)CMake详解

一、CMake 是什么?

CMake 是一个“跨平台的构建配置工具”
不负责真正编译代码,而是:

生成 Makefile / Ninja / VS 工程文件, 再交给 make / ninja / MSVC 去编译。

关系图:

CMakeLists.txt --(cmake)--> Makefile / build.ninja
|
v
make / ninja
|
v
可执行文件 / 库

二、为什么不用直接写 Makefile?

因为 Makefile:

太难写

太容易错

不跨平台(Linux / Windows / macOS 差异巨大)

CMake 的优势:

能力说明
跨平台一份CMakeLists.txt到处用
自动依赖自动处理头文件依赖
工程化非常适合大项目(muduo、redis 都在用)
IDE 友好VSCode / CLion / VS 全支持

三、CMakeLists.txt

cmake_minimum_required(VERSION 3.0) project(main) add_executable(main main.cpp)

cmake_minimum_required

cmake_minimum_required(VERSION 3.0)

指定最低 CMake 版本

防止低版本 cmake 解析失败

project

project(main)

作用:

定义工程名

自动生成一些变量:

PROJECT_NAME # main PROJECT_SOURCE_DIR # 工程根目录 PROJECT_BINARY_DIR # build 目录

add_executable

add_executable(main main.cpp)

含义:

main.cpp生成一个可执行文件main

如果有多个源文件:

add_executable(main main.cpp test.cpp util.cpp)
cmake_minimum_required(VERSION 3.0) project(main) # 配置编译选项 set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g) # 配置头文件搜索路径 #include_directories() # 配置库文件搜索路径 #link_directories() # 设置需要编译的源文件列表 set(SRC_LIST ./mudo_server.cpp)

set(CMAKE_CXX_FLAGS ...)

set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)

作用:

所有 C++ 编译加参数

-g:生成调试信息(给 gdb 用)

头文件 & 库怎么配

头文件搜索路径

include_directories( ${PROJECT_SOURCE_DIR}/include )

链接库文件

指定库目录

link_directories(/usr/local/lib)

链接具体库

target_link_libraries(server muduo_net muduo_base pthread )

推荐的“现代 CMake 写法”

cmake_minimum_required(VERSION 3.10) project(muduo_server) set(CMAKE_CXX_STANDARD 11) add_executable(server mudo_server.cpp ) target_include_directories(server PRIVATE /usr/local/include ) target_link_libraries(server muduo_net muduo_base pthread )

为什么更好?

不污染全局

目标级别管理(server)

更适合大工程

标准编译流程

mkdir build cd build cmake .. make

生成文件在:

build/server
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 3:36:11

Ansible之Playbook(六):实例部署实战

OpenEuler系统全栈自动化部署实战一、前言在之前的Playbook系列文章中,我们学习了Ansible的基础语法、变量、条件判断、循环和Handlers等核心概念。本文将通过一个综合性的实战案例,演示如何使用Ansible Playbook在OpenEuler系统上一键部署一个完整的企业…

作者头像 李华
网站建设 2026/4/16 3:33:18

021、GraphQL与API演进:替代REST的新思路

021、GraphQL与API演进:替代REST的新思路 上周排查一个线上问题,凌晨三点被报警叫醒。前端同事紧急反馈某个管理后台页面加载缓慢,耗时超过十秒。打开监控一看,发现页面初始化时连续发了十几个REST请求,其中一个获取用户详情的接口反复被调用,每次只差一两个字段。后端数…

作者头像 李华
网站建设 2026/4/16 3:31:23

2010-2024年上市公司气候风险指数

本数据集基于中国上市公司年报文本,采用文本分析技术构建企业层面的气候风险指数。数据涵盖2010—2024年期间,共包含51860条公司-年度观测值。数据核心指标包括:股票代码(上市公司唯一标识)、年份、总词数(…

作者头像 李华
网站建设 2026/4/16 3:31:13

CAM++应用场景:智能客服质检,快速比对录音是否同一人

CAM应用场景:智能客服质检,快速比对录音是否同一人 1. 智能客服质检的痛点与需求 在智能客服和呼叫中心行业,每天都会产生海量的通话录音。质检人员面临的核心挑战是: 人工质检效率低:传统方式需要人工逐条听取录音…

作者头像 李华
网站建设 2026/4/16 3:27:13

算法基础应用精讲【人工智能】-基于稀疏Transformer的大规模文本生成系统

目录 一、大规模文本生成的技术挑战 1. 计算复杂度的指数级增长 2. 长程依赖与上下文一致性问题 二、稀疏Transformer架构的设计与优化 1. 局部注意力与全局注意力的混合架构 2. 动态稀疏性与自适应注意力 三、大规模文本生成系统的工程实践 1. 分布式训练与优化 2. 推…

作者头像 李华