恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

CMake实战Http+编译、链接选项的使用

  • 首页
  • 资讯中心
  • /
  • CMake实战Http+编译、链接选项的使用

相关资讯

具身智能商业化应用难题与TVA破解之道(17) 2026/8/31 18:39:19
全球行政区划矢量地图数据获取、处理与GIS应用全流程指南 2026/8/31 18:39:19
三极管基极下拉电阻的作用与电路可靠性设计 2026/8/31 18:34:19

最新资讯

gstack 30秒安装教程:3条命令搭好你的AI工程团队
Serverless 可观测性:日志、监控与链路追踪的实战配置
函数与外部服务集成:数据库、存储、API 的安全连接与性能优化
Flutter实战指南:从环境搭建到跨平台开发避坑
技术面试八股备战全攻略:核心考点、高效方法与工程实践
win安装RTMP推流服务器

今日推荐

MCU无DAC如何用定时器+DMA 2D输出高保真任意波形
Cortex-M3 Flash下载失败?从编程错误标志到供电瞬态排查
STM32 TouchGFX屏幕切换Transition优化:原理、配置与排障实战

本周热门

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

CMake实战Http+编译、链接选项的使用

发布时间:2026/8/31 18:39:19
CMake实战Http+编译、链接选项的使用 bit::Shadow✧(≖ ◡ ≖✿目录文件结构CMakeLists.txt编译选项可见性级别 PRIVATE PUBLIC INTERFACE优化级别[了解]优化级别详解常用优化级别具体区别-O0 (无优化)-O1 (基本优化)-O2 (标准优化) ⭐ 最常用-O3 (激进优化)实际效果示例☆调试与发布的区别对项目的影响程序性能☆对你的项目的建议1. 开发调试阶段2. 测试阶段3. 生产部署注意事项遇到的问题文件结构ubuntuVM-0-11-ubuntu:~/e2026/Ubuntu_learning/Auguest/HTTP$ tree -I build|CMakeCache.txt|CMakeFiles|Makefile|cmake_install.cmake|*.o|*.d|*.bin|*.log|*.save|serverTCP --prune . ├── CMakeLists.txt ├── Comn.hpp ├── Daemon.hpp ├── Http.hpp ├── Log.hpp ├── Mutex_MutexGuard.hpp ├── Protocol.hpp ├── Socket.hpp ├── TCPServer.cc ├── TCPServer.hpp └── Thread.hpp 0 directories, 11 files要求使用Asan编译工具构建。CMakeLists.txtcmake_minimum_required(VERSION 3.18) project(Http) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(serverTCP TCPServer.cc) # 编译选项 target_compile_options(serverTCP PRIVATE -g -fsanitzieaddress -fsanitizeundefined -Wall -Wextra ) # 针对特定目标的链接 target_link_libraries( jsoncpp -fsaniztizeaddress -fsanitizeundefined )编译选项target_compile_options ( [形成目标] [可见性级别选项] [编译选项] )可见性级别 PRIVATE PUBLIC INTERFACE分别译作私有 公有 接口PRIVATE作用只对当前目标失效并不会传递给依赖于当前目标的其他目标。使用对象当前目标的内部实现细节。target_compile_options(serverTCP PRIVATE -Wall) # -Wall 只对 serverTCP 生效 # 如果其他目标链接了 serverTCP不会继承 -WallPUBLIC作用编译选项对当前目标生效并会传递给依赖它的所有目标。使用场景接口要求所有使用者都需要target_compile_options(serverTCP PUBLIC -stdc17) # -stdc17 对 serverTCP 生效 # 如果有 target client 链接了 serverTCPclient 也会使用 -stdc17实例add_library(mylib mylib.cpp) #此处是生成 mylib.a库 add_executable(app app.cpp) # mylib 内部使用但不影响 app target_compile_options(mylib PRIVATE -O2) # 优化级别-O2非数字0 # app 和 mylib 都使用 C17 target_compile_options(mylib PUBLIC -stdc17) # app 链接 mylib会继承 PUBLIC 的选项 target_link_libraries(app PRIVATE mylib)优化级别[了解]-O2是 GCC/Clang 编译器的优化级别选项注意是大写字母 O不是数字零表示Optimization level 2。优化级别详解常用优化级别级别选项说明编译速度运行速度代码大小无优化-O0默认不优化最快最慢中等基本优化-O1基础优化较快较快中等标准优化-O2常用优化推荐中等快较大激进优化-O3激进优化慢最快最大大小优化-Os优化代码大小中等中等最小速度优化-Ofast极致速度可能不标准慢最快最大具体区别-O0(无优化)cppint add(int a, int b) { return a b; } // 编译后直接对应汇编便于调试// 每个变量都在内存中有位置 // 可以单步调试查看变量值-O1(基本优化)删除死代码简单的常量折叠减少不必要的跳转适合需要一定优化但还要调试-O2(标准优化) ⭐最常用包含-O1的所有优化外加指令调度优化循环展开部分函数内联部分更激进的常量传播适合生产环境兼顾速度和编译时间-O3(激进优化)包含-O2的所有优化外加更多函数内联循环完全展开向量化SIMD可能增加代码体积注意有时会导致程序变大甚至变慢实际效果示例cpp// 原始代码 int sum 0; for (int i 0; i 100; i) { sum array[i]; }-O0按原样执行循环-O2可能展开为多个累加减少循环开销-O3可能使用 SIMD 向量化指令一次处理多个数据☆调试与发布的区别cmake#Debug版本 - 方便调试 add_compile_options(-g -O0) # 不优化保留调试信息 #Release版本 - 性能优化 add_compile_options(-O2 -DNDEBUG) # 标准优化移除调试断言 # 高性能版本 add_compile_options(-O3 -marchnative) # 针对本机架构优化对项目的影响程序性能text运行速度-O3 -O2 -O1 -O0 代码大小-O3 -O2 -O1 -O0☆对你的项目的建议1.开发调试阶段cmaketarget_compile_options(serverTCP PRIVATE -g # 调试信息-O0# 不优化方便调试 -Wall # 警告 )2.测试阶段cmaketarget_compile_options(serverTCP PRIVATE -g # 保留调试信息 -O1# 轻度优化 -Wall )3.生产部署cmaketarget_compile_options(serverTCP PRIVATE-O2# 标准优化 -DNDEBUG # 移除 assert -Wall )注意事项-O2可能改变程序行为如果有未定义行为如越界访问-O2可能表现异常调试困难-O2优化后单步调试时执行顺序可能混乱推荐做法开发时用-O0或-O1测试时用-O2发布时用-O2或-O3对于你的 HTTP 服务器项目-O2是很好的选择既能保证性能又不会过度优化导致问题难以调试遇到的问题CMakeList.txt写时末尾总是出现报错的红色波浪号无论写至何处并且自动补全功能失效“我怀疑是网络的问题”显示语法问题函数缺少开头的( --- 末尾未有(形成完整语句。复制得到[{ resource: /home/ubuntu/e2026/Ubuntu_learning/Auguest/HTTP/CMakeLists.txt, owner: cmake-configure-diags, severity: 8, message: CMake Error at CMakeLists.txt:2:Unexpected end of file.\n\nParse error. Function missing opening \(\., source: cmake, startLineNumber: 2, startColumn: 1, endLineNumber: 2, endColumn: 10000, modelVersionId: 1, origin: extHost2 }]解决方式无脑编译。直接cmake .竟然直接跑通.....感谢支持长期连载欢迎关注

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号