全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

CMake如何管理c++项目 从零开始编写CMakeLists.txt【工程化教程】

CMakeLists.txt是构建逻辑脚本,核心为三层结构:项目定义(cmake_minimum_required+project)、源码组织(add_executable/add_library)、构建目标(编译选项、头文件路径、链接依赖);大型项目需模块化拆分并用作用域关键字管控可见性。

用 CMake 管理 C++ 项目,核心是写好 CMakeLists.txt —— 它不是配置文件,而是一份“构建逻辑脚本”。从零开始,关键不是背命令,而是理解三层结构:项目定义 → 源码组织 → 构建目标。

第一步:声明项目与基础要求

每个 CMakeLists.txt 必须以 cmake_minimum_required() 开头,明确最低 CMake 版本(推荐 3.10 或更高),避免因版本差异导致命令不可用。紧接着用 project() 声明项目名、支持的语言(CXX 表示 C++)和版本号:

// 示例:最简起点

cmake_minimum_required(VERSION 3.10)
project(MyApp VERSION 1.0 LANGUAGES CXX)

这一步会自动定义 PROJECT_NAMEPROJECT_VERSION 等变量,后续可直接引用。

第二步:声明可执行文件或库

add_executable()add_library() 注册构建目标。参数是目标名 + 源文件列表(支持相对路径):

  • add_executable(hello main.cpp utils.cpp) → 生成可执行文件 hello
  • add_library(core STATIC core.cpp core.h) → 生成静态库 libcore.a
  • add_library(network SHARED net_client.cpp) → 生成动态库 libnetwork.so(Linux)或 network.dll(Windows)

注意:头文件(如 .h)不参与编译,但建议列出来,方便 IDE 识别和代码导航。

第三步:设置编译选项与依赖关系

让项目真正“工程化”,靠的是这两类指令:

  • 编译属性:用 set_property()target_compile_options() 控制标准、警告、优化级别
    target_compile_options(hello PRIVATE -std=c++17 -Wall -Wextra)
  • 头文件搜索路径:用 target_include_directories() 告诉编译器去哪里找 #include
    target_include_directories(hello PRIVATE include/)PRIVATE 表示仅该目标使用)
  • 链接依赖:用 target_link_libraries() 关联库(含系统库或第三方)
    target_link_libraries(hello PRIVATE core network)(CMake 自动处理 libcore.alibnetwork.so 的路径与顺序)

进阶提示:模块化与跨平台适配

大型项目应拆分 CMakeLists.txt:根目录只负责全局设置和子目录引入,各模块自建自己的 CMakeLists.txt

  • 根目录中写:add_subdirectory(src)add_subdirectory(third_party)
  • src/CMakeLists.txt 中专注定义 add_executable() 和本地依赖
  • 判断平台:if(WIN32)if(APPLE)if(UNIX AND NOT APPLE),用于条件设置(如 Windows 需要 target_link_libraries(app PRIVATE wsock32)

不复杂但容易忽略:始终用 PRIVATE/PUBLIC/INTERFACE 明确作用域,避免头文件路径或宏定义意外泄露到下游目标。


# linux  # windows  # app  # ai  # unix  # c++  # win  # apple  # 配置文件  # 作用域  # red  # Static  # if  # include  # public  # private  # Interface  # ide  # 头文件  # 可执行文件  # 自己的  # 的是  # 进阶  # 可直接  # 第三方  # 第二步  # 两类  # 写好 


相关文章: 如何选择高性价比服务器搭建个人网站?  北京的网站制作公司有哪些,哪个视频网站最好?  ui设计制作网站有哪些,手机UI设计网址吗?  上海网站制作开发公司,上海买房比较好的网站有哪些?  建站之星各版本价格是多少?  C#如何在一个XML文件中查找并替换文本内容  建站之星备案流程有哪些注意事项?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  武清网站制作公司,天津武清个人营业执照注销查询系统网站?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  已有域名和空间,如何快速搭建网站?  如何选择建站程序?包含哪些必备功能与类型?  如何快速上传自定义模板至建站之星?  开源网站制作软件,开源网站什么意思?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  如何用y主机助手快速搭建网站?  如何通过网站建站时间优化SEO与用户体验?  如何通过VPS搭建网站快速盈利?  linux top下的 minerd 木马清除方法  建站之星客服服务时间及联系方式如何?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  全景视频制作网站有哪些,全景图怎么做成网页?  如何在阿里云通过域名搭建网站?  seo网站制作优化,网站SEO优化步骤有哪些?  如何选择可靠的免备案建站服务器?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  建站之星安装后如何配置SEO及设计样式?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  江苏网站制作公司有哪些,江苏书法考级官方网站?  建站之星好吗?新手能否轻松上手建站?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  官网网站制作腾讯审核要多久,联想路由器newifi官网  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  大连网站设计制作招聘信息,大连投诉网站有哪些?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  已有域名和空间如何搭建网站?  建站之星收费标准详解:套餐费用及年费价格表一览  建站之星导航如何优化提升用户体验?  如何在阿里云香港服务器快速搭建网站?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  如何通过建站之星自助学习解决操作问题?  网站制作公司排行榜,四大门户网站排名?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  如何快速查询网址的建站时间与历史轨迹?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。