新闻中心
C++ CMakeLists.txt编写教程_C++项目构建工具CMake入门
CMake通过CMakeLists.txt生成构建配置,基本语法包括指定版本、项目名、源文件编译为可执行文件。支持多源文件、目录结构、头文件路径设置(include_directories)、静态/动态库创建(add_library)与链接(target_link_libraries),并可设C++标准(如C++17)和编译选项(如-Wall)。核心是“目标”概念,对目标设置属性实现灵活构建管理。

CMake 是一个跨平台的构建系统生成工具,广泛用于 C++ 项目中。它不直接编译代码,而是根据 CMakeLists.txt 文件生成适用于不同构建系统的配置文件(如 Makefile、Ninja、Visual Studio 工程等)。掌握如何编写 CMakeLists.txt 是管理 C++ 项目的必备技能。
创建最简单的 CMakeLists.txt
一个最基本的 C++ 项目只需要一个源文件和对应的 CMake 配置文件。
假设你的项目结构如下:
main.cppCMakeLists.txt
在 main.cpp 中写入简单程序:
int main() {
std::cout return 0;
}
然后创建 CMakeLists.txt:
project(HelloCMake)
add_executable(hello main.cpp)
说明:
Motiff妙多
Motiff妙多是一款AI驱动的界面设计工具,定位为“AI时代设计工具”
334
查看详情
- cmake_minimum_required:指定所需最低 CMake 版本,避免使用过新特性导致兼容问题。
- project:定义项目名称,可选地设置语言(默认自动检测为 C 和 C++)。
-
add_executable:将源文件编译成可执行文件,格式为
add_executable(目标名 源文件列表)。
添加多个源文件和目录结构
实际项目通常包含多个源文件。例如:
src/main.cpp
utils.cpp
include/
utils.h
CMakeLists.txt
修改 CMakeLists.txt 如下:
project(MyApp)
# 添加头文件搜索路径
include_directories(include)
# 将多个源文件构建成一个可执行文件
add_executable(myapp src/main.cpp src/utils.cpp)
说明:
-
include_directories:让编译器能找到
#include "utils.h"这类引用。 - 你可以把所有源文件列在
add_executable后面,也可以用变量简化:
src/main.cpp
src/utils.cpp
)
add_executable(myapp ${SOURCES})
链接库文件(静态库或动态库)
如果你有独立的工具库,可以将其构建成静态库再链接到主程序。
目录结构示例:
src/main.cpplib/utils.cpp
include/utils.h
CMakeLists.txt
更新后的 CMakeLists.txt:
project(MyApp)
include_directories(include)
# 构建静态库
add_library(myutils STATIC lib/utils.cpp)
# 生成可执行文件
add_executable(myapp src/main.cpp)
# 链接库
target_link_libraries(myapp myutils)
说明:
-
add_library:创建名为
myutils的静态库(使用STATIC),也可用SHARED创建动态库。 - target_link_libraries:指定哪个目标需要链接哪些库。
设置编译选项和标准版本
现代 C++ 项目常使用 C++17 或更高标准。可以在 CMake 中明确指定:
# 设置 C++ 标准set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 或者针对特定目标设置
target_compile_features(myapp PRIVATE cxx_std_17)
你还可以添加警告选项提升代码质量:
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" ORCMAKE_CXX_COMPILER_ID MATCHES "Clang")
target_compile_options(myapp PRIVATE -Wall -Wextra -pedantic)
endif()
基本上就这些。从简单项目开始,逐步加入子目录、外部依赖、条件编译等功能,CMake 能很好地支持大型 C++ 工程的组织与构建。关键是理解“目标”(target)的概念——每个可执行文件或库都是一个目标,对其设置属性(如包含路径、编译选项、链接库)才是推荐做法。
以上就是C++ CMakeLists.txt编写教程_C++项目构建工具CMake入门的详细内容,更多请关注其它相关文章!
# 怎么做
# 抖音seo相关文案
# 鹤壁知名网站建设推荐
# 南开区电商营销推广招聘
# 高职网站建设与管理
# 元旦微信营销号推广文
# 淮安公司视频号营销推广
# seo如何霸屏
# 义乌门户网站建设
# 郑州网站推广工作怎么样
# 长春seo技巧推荐公司
# 是一个
# 都是
# 解决方法
# c++
# 重写
# 链接库
# 有什么
# 多个
# 可执行文件
# red
# 配置文件
# stream
# ios
# ai
# 工具
# app
# cmake
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
学习通网页版官方登录 超星学习通电脑端入口指南
蛙漫正版漫画平台入口_蛙漫免费阅读全站漫画资源
css链接悬停下划线样式如何自定义_使用::after结合content和transition
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区
利用Bokeh CustomJS动态控制DataTable列可见性
深入理解rpy2中的类型转换:优化Python对象到R矩阵的映射
2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC
Steam官网入口直达 Steam注册及登录步骤
Yandex搜索引擎官网入口_俄罗斯Yandex免登录一键直达
KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】
Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践
Spring Boot内嵌服务器与J*a EE全栈特性:选择与部署策略
C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法
抓大鹅解压小游戏 抓大鹅摸鱼解压入口
黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】
微信网页版官方快速登录入口 微信网页版网页版账号直达
必由学官网快捷入口 必由学网页版在线学习平台
深入理解Promise链:如何在catch后中断then的执行
1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】
Google翻译怎么语音输入_Google翻译语音输入功能使用与设置方法
必由学官网首页入口 必由学教师网页版登录指南
抓大鹅无需下载版 抓大鹅秒玩版入口
J*a应用集成GitHub CLI与API认证指南
J*aScript中安全有效地处理localStorage字符串数据
yandex入口引擎手机版 yandex安卓版下载入口
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension
Selenium Python中处理点击后新窗口加载冻结问题的策略与实践
Composer中的^和~符号代表什么_精通Composer版本号语义化约束
天眼查企业查询官网入口 天眼查官方网页版查询
Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践
邮政快递单号查询入口 邮政快递物流信息在线查询入口
iCloud登录入口网页版 苹果iCloud官网登录
新三国志曹操传110级星符试炼夏侯渊极难攻略
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
聚水潭ERP登录页面入口 聚水潭ERP官网登录界面
MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具
谷歌google账号注册详细步骤 谷歌账号注册官方教程
解决Python logging 中 datefmt 导致时间戳固定不变的问题
Windows电脑怎么截图最方便_系统自带截图工具的5种神仙用法【技巧】
2026春节假期票务安排_2026春节放假购票指南
poki网页游戏推荐_poki免费游戏平台入口
动漫岛观看全网网 动漫岛在线正版动漫入口
LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别
sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
J*aScript实现动态背景色下的文本与按钮颜色自适应调整


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