新闻中心
c++怎么用CMake来管理项目_c++跨平台构建工具CMake使用教程
CMake是跨平台构建系统生成器,通过CMakeLists.txt生成多平台构建文件。1. 安装:Linux用apt,macOS用brew,Windows从官网下载;2. 项目结构含src、include和CMakeLists.txt;3. 基本语法包括设置版本、项目名、C++标准及添加可执行文件;4. 推荐out-of-source构建,使用mkdir build、cmake ..、make编译;5. 配置头文件路径用target_include_directories,链接库用find_package和target_link_libraries;6. 支持条件判断处理跨平台差异,如WIN32、APPLE、UNIX;7. 现代CMake提倡target_*命令提升模块化;8. 可集成测试与安装规则,enable_testing()和install()实现自动化。掌握这些核心用法即可高效管理跨平台C++项目。

CMake 是一个强大的跨平台构建系统生成器,广泛用于 C++ 项目中。它不直接编译代码,而是根据 CMakeLists.txt 文件生成适用于不同平台的构建文件(如 Makefile、Visual Studio 工程等),从而实现“一次编写,多平台构建”。
1. 安装 CMake
在使用前需确保已安装 CMake:
-
Linux(Ubuntu/Debian):
sudo apt install cmake -
macOS:
brew install cmake - Windows:从 官网下载安装包,或使用 vcpkg、MSYS2 等工具安装
安装完成后,可通过以下命令验证:
cmake --version2. 基本项目结构
一个典型的 C++ 项目结构如下:
my_project/
├── CMakeLists.txt
├── src/
│ └── main.cpp
└── include/
└── my_header.h
在项目根目录创建 CMakeLists.txt,内容如下:
cmake_minimum_required(VERSION 3.10)<br>
project(MyProject LANGUAGES CXX)<br><br>
# 设置 C++ 标准<br>
set(CMAKE_CXX_STANDARD 17)<br>
set(CMAKE_CXX_STANDARD_REQUIRED ON)<br><br>
# 添加可执行文件<br>
add_executable(${PROJECT_NAME}<br>
src/main.cpp<br>
)
说明:
-
cmake_minimum_required:指定所需最低 CMake 版本 -
project:定义项目名称和语言 -
set(CMAKE_CXX_STANDARD ...):启用 C++17 支持 -
add_executable:将源文件编译为可执行程序
3. 编译与运行项目
推荐使用 out-of-source 构建方式,避免污染源码目录:
mkdir build<br> cd build<br> cmake ..<br> make
生成后可在 build/ 目录下找到可执行文件 MyProject,运行:
./MyProject4. 添加头文件目录和库依赖
若项目包含头文件或第三方库,需配置包含路径:
target_include_directories(${PROJECT_NAME} PRIVATE<br>
${PROJECT_SOURCE_DIR}/include<br>
)
如果需要链接外部库(例如 Boost 或 OpenCV):
Zyro AI Background Remover
Zyro推出的AI图片背景移除工具
145
查看详情
find_package(OpenCV REQUIRED)<br>
target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS})
对于静态或动态库,可使用 add_library 创建:
add_library(mylib STATIC src/mylib.cpp)<br>
target_include_directories(mylib PUBLIC include)<br>
target_link_libraries(${PROJECT_NAME} PRIVATE mylib)
5. 跨平台兼容性处理
CMake 可自动识别平台并做条件判断:
if(WIN32)<br>
message("Building on Windows")<br>
add_compile_definitions(IS_WINDOWS)<br>
elseif(APPLE)<br>
message("Building on macOS")<br>
elseif(UNIX)<br>
message("Building on Linux")<br>
endif()
也可针对不同构建类型(Debug/Release)设置编译选项:
if(CMAKE_BUILD_TYPE STREQUAL "Debug")<br>
add_compile_definitions(DEBUG_MODE)<br>
endif()
6. 使用现代 CMake 最佳实践
现代 CMake 推荐使用 target_* 系列命令,而非全局设置:
-
target_include_directories():只为特定目标添加头文件路径 -
target_compile_features():指定目标所需的编译特性 -
target_link_libraries():精确控制库依赖传递
这样可以提升模块化程度,便于大型项目维护。
7. 集成测试与安装
启用测试功能:
enable_testing()<br> add_test(NAME run_main COMMAND MyProject)
设置安装规则:
install(TARGETS ${PROJECT_NAME}<br>
DESTINATION bin<br>
)<br>
install(DIRECTORY include/<br>
DESTINATION include<br>
)
执行安装:
make install(可指定 CMAKE_INSTALL_PREFIX)
基本上就这些。CMake 功能丰富,但掌握基本语法后就能高效管理大多数 C++ 项目,尤其适合希望支持 Windows、Linux 和 macOS 的跨平台开发场景。
以上就是c++++怎么用CMake来管理项目_c++跨平台构建工具CMake使用教程的详细内容,更多请关注其它相关文章!
# 所需
# 搞网站建设
# 金阊网站优化找哪家
# 绍兴集团网站建设选哪家
# 汽修营销推广是什么意思
# 网站怎么优化站点
# 如何seo网站优化技术
# 哈尔滨网站建设哪家有
# seo优化网站br值
# 网站如何在搜狗上推广
# 优化软件会不会导致网站
# 是一个
# 网络编程
# 官网
# 有什么区别
# 微软
# linux
# 推荐使用
# 可执行文件
# 头文件
# 第三方
# apple
# win
# macos
# c++
# unix
# ai
# mac
# 工具
# ubuntu
# app
# windows
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口
C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入
提升Kafka消费者健壮性:会话超时处理与消息处理语义
MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复
Mac怎么使用表情符号_Mac Emoji快捷键面板
React/Next.js中实现列表项的动态选择与移动
凉拌黄瓜怎么拌更入味 凉拌黄瓜简单家常做法
c++如何使用Catch2编写单元测试_c++简洁易用的BDD风格测试框架
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
解决Django多数据库/多Schema环境下外键迁移问题
Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐
PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧
2025-2030年全球乘用车销量预测:新能源成增长主力
韩小圈电脑版在线入口_网页版免费登录地址
汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口
J*aScript中赋值与自增运算符的复杂交互与执行机制
地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站
利用Bokeh CustomJS动态控制DataTable列可见性
TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程
押井守高度称赞《辐射4》:玩了八年都停不下来!
Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
学习通在线学习平台 学习通网页版直接进入课程中心
Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】
163邮箱注册官网 免费申请163个人邮箱
一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰
包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址
J*a最大堆Heapify方法修复:索引计算与边界条件深度解析
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式
文本文档写html代码怎么运行_文本文档html代码运行步骤【教程】
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】
抖音网页版快捷访问 抖音网页版网页版入口操作教程
AngularJS $http POST请求数据传递与Go后端接收实践
PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】
支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡
Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】
铁路12306改签能改到更早的车次吗_铁路12306改签提前车次规则
魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】
Centos/Linux 系统下安装 composer 的完整步骤
一加 14R 快充无反应_一加 14R 充电优化
怎么在mac上运行html代码_mac运行html代码方法【指南】
word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法
文心一言怎样用批量生成做多版文案_文心一言用批量生成做多版文案【批量创作】
高德地图怎么看全景照片_高德地图全景照片浏览教程
Highcharts 雷达图径向轴标签定制指南:利用多Y轴实现数值标注
c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析
12306选座怎么选到特殊座位_12306特殊座位选择注意事项
Composer中的^和~符号代表什么_精通Composer版本号语义化约束


2025-11-14
浏览次数:次
返回列表