封面
版权信息
版权
内容提要
前言
本书读者
第1章 构建之旅
1.1 单源文件程序:您好,世界
1.2 构建多源程序
1.2.1 输出另一源程序的字符串
1.2.2 一个需要漫长编译过程的程序
1.2.3 按需编译:快速构建变更
1.2.4 使用Makefile简化构建
1.3 构建静态库
1.4 构建动态库
1.4.1 Windows中动态链接的原理
1.4.2 Linux中动态链接的原理
1.5 引用第三方库
1.5.1 下载Boost C++库
1.5.2 引用Boost C++头文件库
1.5.3 安装Boost C++库
1.5.4 链接Boost C++库
1.6 旅行笔记
1.6.1 构建的基本单元:源程序
1.6.2 核心的抽象概念:构建目标
1.6.3 目标属性
1.6.4 使用要求的传递性
1.6.5 目录属性
1.6.6 自定义构建规则
1.6.7 尾声
第2章 CMake简介
2.1 为什么使用CMake
2.1.1 平台无关和编译器无关
2.1.2 开源自由和优秀的社区生态
2.1.3 强大通用的脚本语言
2.1.4 稳定地向后兼容
2.1.5 持续不断地改进和推出新特性
2.2 安装CMake
2.2.1 在Windows中安装CMake
2.2.2 在Linux中安装CMake
2.2.3 在macOS中安装CMake
2.3 您好,CMake!
第3章 基础语法
3.1 CMake程序
3.1.1 目录(CMakeLists.txt)
3.1.2 脚本(<script>.cmake)
3.1.3 模块(<module>.cmake)
3.2 注释
3.2.1 单行注释
3.2.2 括号注释
3.3 命令调用
3.4 命令参数
3.4.1 引号参数
3.4.2 非引号参数
3.4.3 变量引用
3.4.4 转义字符
3.4.5 括号参数
3.5 变量
3.5.1 预定义变量
3.5.2 定义变量
3.6 列表
3.7 控制结构
3.7.1 if条件分支
3.7.2 while判断循环
3.7.3 foreach遍历循环
3.7.4 跳出和跳过循环:break和continue
3.8 条件语法
3.8.1 常量、变量和字符串条件
3.8.2 逻辑运算
3.8.3 单参数条件
3.8.4 双参数条件
3.8.5 括号和条件优先级
3.8.6 变量展开
3.9 命令定义
3.9.1 宏定义
3.9.2 函数定义
3.9.3 参数的访问
3.9.4 参数的设计与解析
3.9.5 宏和函数的区别
3.10 小结
第4章 常用命令
4.1 数值操作命令:math
4.2 字符串操作命令:string
4.2.1 搜索和替换
4.2.2 正则匹配和替换
4.2.3 取字符串长度
4.2.4 字符串变换
4.2.5 比较字符串
4.2.6 取哈希值
4.2.7 字符串生成
4.2.8 字符串模板
4.2.9 JSON操作
4.3 列表操作命令:list
4.3.1 回顾列表
4.3.2 访问列表元素
4.3.3 获取列表长度
4.3.4 列表元素增删
4.3.5 列表变换
4.3.6 列表重排
4.3.7 列表元素变换
4.4 文件操作命令:file
4.4.1 读取文件
4.4.2 获取运行时依赖
4.4.3 写入文件
4.4.4 模板文件
4.4.5 遍历路径
4.4.6 移动文件或目录
4.4.7 删除文件或目录
4.4.8 创建目录
4.4.9 复制文件或目录
4.4.10 文件传输
4.4.11 锁定文件
4.4.12 归档压缩
4.4.13 生成文件
4.4.14 路径转换
4.5 路径操作命令:cmake_path
4.5.1 路径结构
4.5.2 创建路径变量
4.5.3 分解路径结构
4.5.4 路径判别
4.5.5 比较路径
4.5.6 路径修改
4.5.7 路径转换
4.6 路径操作命令:get_filename_component
4.6.1 分解路径结构
4.6.2 解析命令行
4.7 配置模板文件:configure_file
4.8 日志输出命令:message
4.8.1 输出日志
4.8.2 筛选日志级别
4.8.3 输出检查状态
4.8.4 设置输出格式
4.9 执行程序:execute_process
4.9.1 管道输出
4.9.2 并行执行
4.9.3 子进程继承环境变量
4.9.4 设置工作目录
4.9.5 获取进程返回值
4.9.6 设置超时时长
4.9.7 设置输出变量
4.9.8 设置输入输出文件
4.9.9 屏蔽输出
4.9.10 删除输出尾部空白
4.9.11 输出命令行调用
4.9.12 设置输出编码
4.9.13 设置失败条件
4.9.14 解析命令行参数:separate_arguments
4.10 引用CMake程序:include
4.10.1 引用CMake程序
4.10.2 引用卫哨:include_guard
4.11 执行代码片段:cmake_language
4.11.1 调用命令
4.11.2 执行代码
4.11.3 延迟调用命令
4.12 监控变量:variable_watch
实例
第5章 实践:CMake快速排序
第6章 CMake构建初探
6.1 CMake项目的生命周期
6.1.1 配置阶段和生成阶段
6.1.2 构建阶段
6.1.3 安装阶段和打包阶段
6.1.4 程序包安装阶段
6.2 项目配置与缓存变量
6.2.1 使用CMake GUI配置缓存变量
6.2.2 常用缓存变量
6.2.3 标记缓存变量为高级配置:mark_as_advanced
6.3 CMake命令行的使用
6.3.1 配置和生成
6.3.2 构建
6.3.3 打开生成的项目
6.3.4 安装
6.3.5 内置命令行工具
6.4 使用Visual Studio打开CMake项目
6.4.1 生成Visual Studio的原生解决方案
6.4.2 使用Visual Studio直接打开CMake项目
6.5 小结
第7章 构建目标和属性
7.1 二进制构建目标
7.1.1 可执行文件目标
7.1.2 一般库目标
7.1.3 目标文件库目标
7.1.4 指定源文件的方式
7.2 伪构建目标
7.2.1 接口库目标
7.2.2 导入目标
7.2.3 别名目标
7.3 子目录
加入子目录:add_subdirectory
7.4 项目:project
代码注入
7.5 属性:get_property、set_property
7.5.1 全局属性
7.5.2 目录属性
7.5.3 目标属性
7.5.4 源文件属性
7.5.5 缓存变量属性
7.5.6 构建中常用的属性
7.5.7 自定义属性:define_property
7.6 属性相关命令
7.6.1 设置目标链接库:target_link_libraries
7.6.2 PUBLIC、INTERFACE、PRIVATE与传递性
7.6.3 设置宏定义:add_compile_definitions
7.6.4 设置目标宏定义:target_compile_definitions
7.6.5 设置编译参数:add_compile_options
7.6.6 设置目标编译参数:target_compile_options
7.6.7 设置目标编译特性:target_compile_features
7.6.8 设置头文件目录:include_directories
7.6.9 设置目标头文件目录:target_include_directories
7.6.10 设置链接库:link_libraries
7.6.11 设置链接目录:link_directories
7.6.12 设置目标链接目录:target_link_directories
7.6.13 设置链接参数:add_link_options
7.6.14 设置目标链接参数:target_link_options
7.6.15 设置目标源文件:target_sources
7.6.16 无须递归传递的例程
7.6.17 存在间接引用的例程
7.7 自定义构建规则:add_custom_command
7.7.1 生成文件
7.7.2 响应构建事件
7.8 自定义构建目标:add_custom_target
7.9 设置依赖关系:add_dependencies
7.10 小结
第8章 生成器表达式
8.1 支持生成器表达式的命令
8.1.1 创建构建目标的命令
8.1.2 属性相关命令
8.1.3 自定义构建规则和目标
8.2 布尔型生成器表达式
8.2.1 转换字符串为布尔值:BOOL
8.2.2 逻辑运算
8.2.3 关系比较
8.2.4 谓词查询
8.3 字符串生成器表达式
8.3.1 字符转义
8.3.2 条件表达式:IF
8.3.3 字符串变换
8.3.4 目标相关表达式
8.3.5 解析生成器表达式
8.4 小结
第9章 模块
9.1 引用功能模块
9.2 常用的预置功能模块
9.2.1 用于调试的模块
9.2.2 用于检查环境的模块
9.2.3 用于生成导出头文件的模块:GenerateExportHeader
9.3 查找模块
9.3.1 查找软件包命令:find_package(模块模式)
9.3.2 实例:使用FindThreads引用线程库
9.3.3 实例:使用FindBoost引用Boost库
9.4 编写自定义查找模块
9.4.1 查找文件:find_file
9.4.2 查找库文件:find_library
9.4.3 查找目录:find_path
9.4.4 查找可执行文件:find_program
9.4.5 与查找参数相关的变量
9.4.6 查找条件变量
9.4.7 查找结果变量
9.4.8 FindPackageHandleStandardArgs模块
9.4.9 实例:onnxruntime的查找模块
9.5 小结
第10章 策略与向后兼容
10.1 CMake策略(以CMP0115为例)
借助官方文档查阅CMake策略
10.2 指定CMake最低版本要求:cmake_minimum_required
最低版本要求与策略设置
10.3 管理策略行为:cmake_policy
10.3.1 按策略名称设置策略行为
10.3.2 获取策略行为
10.3.3 按CMake版本设置策略行为
10.3.4 管理CMake策略栈
10.4 渐进式重构CMake程序
10.4.1 局部代码重构并启用新行为
10.4.2 禁用警告信息
10.4.3 同时兼容旧版CMake
10.4.4 为全部策略采用新行为
10.4.5 完全切换到新版CMake
10.5 小结
第11章 实践:基于onnxruntime的手写数字识别库
11.1 前期设计
11.1.1 模块设计
11.1.2 项目目录结构
11.1.3 接口设计
11.2 第三方库
11.2.1 安装zlib库
11.2.2 安装libpng库
11.2.3 libpng的查找模块
11.3 CMake目录程序
11.3.1 查找软件包
11.3.2 num_recognizer动态库目标
11.3.3 recognize可执行文件目标
11.4 代码实现
11.4.1 全局常量和全局变量
11.4.2 手写数字识别类
11.4.3 初始化接口实现
11.4.4 构造识别器接口实现
11.4.5 析构识别器接口实现
11.4.6 识别二值化图片像素数组接口实现
11.4.7 识别PNG图片接口实现
11.4.8 完善手写数字识别库的头文件(以同时支持C语言)
11.4.9 命令行工具的实现
11.5 构建和运行
11.6 小结
更新时间:2024-04-22 11:29:23