全网整合营销服务商

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

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

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.cpp
CMakeLists.txt

main.cpp 中写入简单程序:

#include iostream>
int main() {
   std::cout    return 0;
}

然后创建 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(HelloCMake)
add_executable(hello main.cpp)

说明:

  • cmake_minimum_required:指定所需最低 CMake 版本,避免使用过新特性导致兼容问题。
  • project:定义项目名称,可选地设置语言(默认自动检测为 C 和 C++)。
  • add_executable:将源文件编译成可执行文件,格式为 add_executable(目标名 源文件列表)

添加多个源文件和目录结构

实际项目通常包含多个源文件。例如:

src/
  main.cpp
  utils.cpp
include/
  utils.h
CMakeLists.txt

修改 CMakeLists.txt 如下:

cmake_minimum_required(VERSION 3.10)
project(MyApp)

# 添加头文件搜索路径
include_directories(include)

# 将多个源文件构建成一个可执行文件
add_executable(myapp src/main.cpp src/utils.cpp)

说明:

  • include_directories:让编译器能找到 #include "utils.h" 这类引用。
  • 你可以把所有源文件列在 add_executable 后面,也可以用变量简化:
set(SOURCES
  src/main.cpp
  src/utils.cpp
)
add_executable(myapp ${SOURCES})

链接库文件(静态库或动态库)

如果你有独立的工具库,可以将其构建成静态库再链接到主程序。

目录结构示例:

src/main.cpp
lib/utils.cpp
include/utils.h
CMakeLists.txt

更新后的 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
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" OR
   CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  target_compile_options(myapp PRIVATE -Wall -Wextra -pedantic)
endif()

基本上就这些。从简单项目开始,逐步加入子目录、外部依赖、条件编译等功能,CMake 能很好地支持大型 C++ 工程的组织与构建。关键是理解“目标”(target)的概念——每个可执行文件或库都是一个目标,对其设置属性(如包含路径、编译选项、链接库)才是推荐做法。


# c++  # app  # 工具  # ai  # ios  # stream  # 配置文件  # red  # Static  # if  # include  # int  # private  # visual studio  # gnu  # 可执行文件  # 多个  # 链接库  # 都是  # 是一个  # 头文件  # 很好  # 你可以  # 才是 


相关文章: 西安大型网站制作公司,西安招聘网站最好的是哪个?  如何使用Golang安装API文档生成工具_快速生成接口文档  油猴 教程,油猴搜脚本为什么会网页无法显示?  宝塔面板如何快速创建新站点?  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  建站主机如何选?性能与价格怎样平衡?  盐城做公司网站,江苏电子版退休证办理流程?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  如何基于云服务器快速搭建网站及云盘系统?  ,网站推广常用方法?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  宝塔Windows建站如何避免显示默认IIS页面?  建站之星上传入口如何快速找到?  Android自定义控件实现温度旋转按钮效果  建站主机与虚拟主机有何区别?如何选择最优方案?  如何通过VPS搭建网站快速盈利?  建站主机无法访问?如何排查域名与服务器问题  如何快速选择适合个人网站的云服务器配置?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  ,南京靠谱的征婚网站?  实例解析angularjs的filter过滤器  如何用AWS免费套餐快速搭建高效网站?  如何选择高性价比服务器搭建个人网站?  建站主机是什么?如何选择适合的建站主机?  个人摄影网站制作流程,摄影爱好者都去什么网站?  再谈Python中的字符串与字符编码(推荐)  建站之星多图banner生成与模板自定义指南  如何快速搭建二级域名独立网站?  建站之星代理如何获取技术支持?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  如何用IIS7快速搭建并优化网站站点?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  如何在腾讯云免费申请建站?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  如何快速搭建高效简练网站?  实现虚拟支付需哪些建站技术支撑?  如何零基础开发自助建站系统?完整教程解析  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  如何制作一个表白网站视频,关于勇敢表白的小标题?  网站制作公司,橙子建站是合法的吗?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何通过万网虚拟主机快速搭建网站?  平台云上自助建站如何快速打造专业网站?  如何在阿里云虚拟主机上快速搭建个人网站?  公司门户网站制作流程,华为官网怎么做?  建站之星×万网:智能建站系统+自助建站平台一键生成 

您的项目需求

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