互联网
类型
可以朗读
语音朗读
296千字
字数
2024-02-01
发行日期
展开全部
主编推荐语
打牢基础,拥抱现代CMake。
内容简介
本书主要介绍C和C++程序构建的相关知识,包括直接调用C和C++编译器完成构建的基础内容,以及使用CMake完成项目构建的相关内容。
全书先介绍市面上C和C++的主流编译器及其相关命令行工具、Makefile等的使用,抽象出与项目构建相关的概念模型,再介绍CMake脚本语言的基础语法、常用命令等,最后介绍与CMake项目构建相关的内容。
本书含有两个实践章节,借助CMake脚本语言,分别构建了快速排序算法程序、手写数字识别库及配套命令行工具。
本书适合有C和C++编程基础,希望了解或应用CMake工具的人阅读,也适合想要构建跨平台C和C++程序的开发人员阅读。
目录
- 版权信息
- 内容提要
- 前言
- 资源与支持
- 第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 子目录
- 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为例)
- 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 小结
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。