当前位置: 首页 > news >正文

Kama-muduo项目配置

项目地址https://github.com/youngyangyang04/muduo-core#

编译与运行

在Ubuntu中把Cmake、gcc、g++都安装好后开始项目的编译

sudo sh -c 'apt update ; apt install -y build-essential' sudo apt install cmake # 检查 gcc 版本 gcc --version # 检查 g++ 版本 g++ --version # 检查 cmake 版本 cmake --version

mkdir build cd build cmake .. make -j4 #在example文件夹里运行 ./testserver #另开终端 # 方式1:nc nc 127.0.0.1 8080 # 输入任意内容(比如 hello),回车后会收到相同内容的回显 # 方式2:telnet telnet 127.0.0.1 8080

主目录CMakeLists.txt

example目录下的CMakeLists.txt

1. 「父子层级」:根配置驱动子配置

主目录 CMakeLists.txt 中通过add_subdirectory(example)显式触发 example 目录的 CMakeLists.txt 执行,且执行顺序有依赖:

  • 先执行add_subdirectory(src)编译出muduo_core动态库;

  • 再执行add_subdirectory(example)编译示例程序(因为示例依赖muduo_core库)。

2. 「变量继承」:子配置复用根配置的全局变量

example 目录的 CMakeLists.txt 能直接使用根配置定义的全局变量 / 规则,比如:

  • 根配置中定义的LIBS(包含 pthread):target_link_libraries(testserver muduo_core ${LIBS})直接复用;

  • 根配置中设置的CMAKE_CXX_STANDARD 11:示例程序默认继承(即便 example 里又加了-std=c++11,属于冗余但兼容);

  • 根配置中编译出的muduo_core库:example 可直接通过库名链接(因为 CMake 会识别全局编译出的库)。

3. 「路径关联」:输出路径的配合

  • 根配置通过set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)指定muduo_core.so输出到lib目录;

  • example 配置通过RUNTIME_OUTPUT_DIRECTORY指定testserver输出到 example 目录,且运行时可通过LD_LIBRARY_PATH关联到根目录的lib库。

三、通俗理解

可以把整个编译流程比作「工厂生产」:

  • 主目录 CMakeLists.txt= 工厂总调度:制定全厂的生产标准(C++11)、采购通用原料(链接 pthread)、安排车间生产顺序(先造核心零件muduo_core,再造成品testserver);

  • example/CMakeLists.txt= 成品组装车间:只负责用「核心零件(muduo_core 库)」+「车间自有原料(testserver.cc)」组装出最终可直接使用的成品(testserver 可执行文件),且组装规则遵循总调度的要求。

src目录下的CMakeLists.txt

四、关键细节补充

  1. 若删除主目录的add_subdirectory(example),则 example 目录的 CMakeLists.txt 不会被执行,无法生成 testserver;

  2. example 中的配置优先级更高:比如 example 里指定了-Wall警告、自定义可执行文件输出路径,会覆盖 / 补充根配置的全局规则;

  3. 依赖的单向性:example 依赖 src 编译的库,但 src/CMakeLists.txt 不依赖 example(即便删除 example,src 仍能正常编译出 muduo_core 库)

http://www.jsqmd.com/news/632532/

相关文章:

  • Speech Seaco Paraformer部署指南:简单几步,搭建专属语音转文字工具
  • cartreader电源管理与便携性:使用移动电源打造便携式卡带读取站
  • 2026届学术党必备的五大AI学术方案解析与推荐
  • GPT-SoVITS快速上手实测:仅需1段录音,打造你的个人语音助手
  • Gecco插件扩展机制:自定义下载器、渲染器和管道的开发指南
  • Qwen-Ranker Pro效果实测:对比Bi-Encoder,语义陷阱识别率提升300%
  • YOLO12实时目标检测模型应用:工业质检场景下的缺陷检测
  • Java垃圾回收日志分析:洞察内存管理的秘密
  • 如何快速部署iTransformer:完整实战指南与性能优化技巧
  • Lychee模型部署常见问题大全:从C盘清理到GPU优化
  • 《OpenClaw (Docker手工部署版) 终极避坑与实战指南》每
  • Java位运算技巧:提升编程效率的隐藏利器
  • 从Google Spanner到阿里OceanBase:拆解Paxos在万亿级数据库里是怎么‘打工’的
  • Llama-3.2V-11B-cot实战教程:从安装到图文问答,全程无报错操作手册
  • Qwen3.5-35B-A3B-AWQ-4bit图文问答教程:从单图描述到复杂逻辑推理进阶路径
  • LFM2.5-1.2B-Thinking-GGUF惊艳效果:同一输入下Temperature=0.1 vs 0.9的稳定性对比
  • 使用Qwen3-ASR-0.6B实现多语言语音翻译系统的开发
  • Intv_ai_mk11与Dify平台集成:可视化构建AI对话工作流
  • 软件欺诈检测中的行为分析模型
  • 2026年评价高的L形全铜DOT接头/Y形全铜三通DOT接头/直通全卡套DOT接头厂家实力揭秘 - 品牌宣传支持者
  • Java正则表达式详解
  • 像素史诗·智识终端算法解析与应用:从LSTM到卷积神经网络
  • 树莓派 4B 使用 /dev/ttyAMA0(硬件串口) 进行 RS232 通信
  • Paparazzi企业级部署指南:CI/CD集成与大规模团队协作
  • 2026年评价高的大连艺术留学一对一/大连艺术留学全程服务/大连艺术留学作品集保录取/大连艺术留学规划服务口碑企业 - 行业平台推荐
  • Java随机数生成与安全:探索与实践
  • Spring Boot WebFlux 响应式应用架构
  • Phi-3-Mini-128K多场景:支持代码补全、SQL生成、正则表达式编写、Shell脚本调试
  • 2026年比较好的国内艺术留学展览规划/国内艺术留学背景提升业内知名推荐机构 - 行业平台推荐
  • Pixel Couplet Gen代码实例:像素春联生成结果JSON Schema定义与校验逻辑