全网整合营销服务商

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

免费咨询热线: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  # 可执行文件  # 多个  # 链接库  # 都是  # 是一个  # 头文件  # 很好  # 你可以  # 才是 


相关文章: 建站主机如何选?高性价比方案全解析  宁波免费建站如何选择可靠模板与平台?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何在万网自助建站中设置域名及备案?  如何在阿里云ECS服务器部署织梦CMS网站?  如何在Windows环境下新建FTP站点并设置权限?  建站之星如何助力企业快速打造五合一网站?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  网站制作企业,网站的banner和导航栏是指什么?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  免费网站制作appp,免费制作app哪个平台好?  ,南京靠谱的征婚网站?  C#如何在一个XML文件中查找并替换文本内容  贸易公司网站制作流程,出口贸易网站设计怎么做?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  建站VPS能否同时实现高效与安全翻墙?  如何基于云服务器快速搭建网站及云盘系统?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  大同网页,大同瑞慈医院官网?  建站之星如何实现五合一智能建站与营销推广?  建站主机类型有哪些?如何正确选型  成都响应式网站开发,dw怎么把手机适应页面变成网页?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  如何通过IIS搭建网站并配置访问权限?  网站制作服务平台,有什么网站可以发布本地服务信息?  代购小票制作网站有哪些,购物小票的简要说明?  C#如何使用XPathNavigator高效查询XML  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  如何通过西部数码建站助手快速创建专业网站?  如何彻底删除建站之星生成的Banner?  家庭服务器如何搭建个人网站?  如何通过wdcp面板快速创建网站?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  海南网站制作公司有哪些,海口网是哪家的?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何用y主机助手快速搭建网站?  制作公司内部网站有哪些,内网如何建网站?  建站168自助建站系统:快速模板定制与SEO优化指南  c++ stringstream用法详解_c++字符串与数字转换利器  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  Swift中swift中的switch 语句  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  Python lxml的etree和ElementTree有什么区别  如何快速查询网址的建站时间与历史轨迹?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  如何快速搭建高效香港服务器网站?  营销式网站制作方案,销售哪个网站招聘效果最好?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规? 

您的项目需求

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