作者:empty 页数:575 出版社:empty |
本书作者Radovan Bast就职于特罗姆森的摄威北极大学(uiT, University of Norway inTro ms) 的高性能计算小组工作,对项目的代码精简进行指导。他拥有化学博士学位,并作为开发人员参与了许多量子化学项目。喜欢新的编程语言和技术, 并向学生和研究人员传授编程经验。在2008年与C Make结缘,并移植了大量源码, 并且将一些源码迁移到C Make社区。Rerto Di Remigio是挪威大学(特罗姆森) 和美国弗吉尼亚理工学院的化学博士后研究员, 目前在研究随机方法和求解模型。是PCM Solver和Psi 4开源量子化学项目的开发人员。为量子化学的发展做出了贡献, 其参与的项目有:Dirac、MR CPP、Dalton、LS Dalton、Xc un和ReSpect。经常使用c++和Fortran编码。
我们要感谢本书评审Eric Nou lard和Eric Nou lard的宝贵意见和建议。特别是Eric的反馈和建议, 明显提高了本书的质量。我们还感谢LoriA, Burns对第8章到第11章的评论和建议。特别感谢特罗姆森公共图书馆为写作和思考提供了一个良好环境。我们非常感谢Travis CI、GmbH、App vey orSystems公司和circle Internet Services公司提供的测试设备和支持-正是由于他们的支持,我们才有信心在主流操作系统中完成本书的示例。
本书评审Eric Nou lard博士, 具有法国恩塞伊特大学的工程学学位, 法国乌夫斯克大学的计算机科学博士学位。20多年来, 使用多种语言编写源码。从2006年开始使用C Make, 这些年来也一直是C Make的积极贡献者。其职业生涯中, 曾为私人公司和政府机构工作。现在就职于Anti ot, 开发和营销高端信息检索技术和解决方案。Eric Nou lard来自以色列, 是一名软件开发人员和作家。从2000年起就为置身于各种开源和开放文化项目。除此之外, 还发起过游戏解决方案, 比如Pysol FC系列纸牌游戏, 采用了财富模式, 解决了290多个欧拉问题。在平时,会写了一些故事、随笔和格言之类的文章。
0.1获取代码
0.2Docker镜像
0.3安装必要的软件
0.4测试环境
0.5上报问题并提出改进建议
1.1将单个源文件编译为可执行文件
1.2切换生成器
1.3构建和链接静态库和动态库
1.4用条件句控制编译
1.5向用户显示选项
1.6指定编译器
1.7切换构建类型
1.8设置编译器选项
1.9为语言设定标准
1.10使用控制流
2.1检测操作系统
2.处理与平台相关的源代码
2.3处理与编译器相关的源代码
2.4检测处理器体系结构
2.5检测处理器指令集
2.6为Eigen库使能向量化
3.1检测Python解释器
3.2检测Python库
3.3检测Python模块和包
3.4检测BLAS和LAPACK数学库
3.5检测OpenMP的并行环境
3.6检测MPI的并行环境
3.7检测Eigen库
3.8检测Boost库
致谢
Introduction
前言
第0章配置环境
第1章从可执行文件到库
第2章检测环境
第3章检测外部库和程序
3.9检测外部库:I.使用pkg-config
3.10检测外部库:Ⅱ.自定义find模块
4.1创建一个简单的单元测试
4.2使用Catch 2库进行单元测试
4.3使用Google Test库进行单元测试
4.4使用Boost Test进行单元测试
4.5使用动态分析来检测内存缺陷
4.6预期测试失败
4.7使用超时测试运行时间过长的测试
4.8并行测试
4.9运行测试子集
4.10使用测试固件
5.1使用平台无关的文件操作
5.2配置时运行自定义命令
第4章创建和运行测试
第5章配置时和构建时的操作
第6章生成源码
第7章构建项目
第8章超级构建模式
第9章语言混合项目
第10章编写安装程序
第11章打包项目
第12章构建文档
第13章选择生成器和交叉编译
第14章测试面板
5.3构建时运行自定义命令1.使用add_custom_command
5.4构建时运行自定义命令:Ⅱ.使用add_custom_target
5.5构建时为特定目标运行自定义命令
5.6探究编译和链接命令
5.7探究编译器标志命令
5.8探究可执行命令
5.9使用生成器表达式微调配置和编译
6.1配置时生成源码
6.2使用Python在配置时生成源码
6.3构建时使用Python生成源码
6.4记录项目版本信息以便报告
6.5从文件中记录项目版本
6.6配置时记录Git Hash值
6.7构建时记录Git Hash值
7.1使用函数和宏重用代码
7.2将C Make源代码分成模块
7.3编写函数来测试和设置编译器标志
7.4用指定参数定义函数或宏
7.5重新定义函数和宏
7.6使用废弃函数、宏和变量
7.7add_subdirectory的限定范围
7.8使用target_sources避免全局变量
7.9组织Fortran项目
8.1使用超级构建模式
8.2使用超级构建管理依赖项:L.Boost库
8.3使用超级构建管理依赖项:I.FFTW库
8.4使用超级构建管理依赖项:Ⅲ.Google Test框架
8.5使用超级构建支持项目
9.1使用C/C++库构建Fortran项目
9.2使用Fortran库构建C/C++项目
9.3使用Cyt hon构建C++和Python项目
9.4使用Boost.Python构建C++和Python项目
9.5使用py bind 11构建C++和Python项目
9.6使用Python C FFl混合C, C++, Fortran和Python
10.1安装项目
10.2生成输出头文件
10.3输出目标
10.4安装超级构建
11.1生成源代码和二进制包
11.2通过PyPI发布使用C Make/py bind 11构建的C++/Python项目
11.3通过PyPI发布使用C Make/CFFI构建C/Fortran/Python项目
11.4以Cond a包的形式发布一个简单的项目
11.5将Cond a包作为依赖项发布给项目
12.1使用Doxygen构建文档
12.2使用Sphinx构建文档
12.3结合Doxygen和Sphinx
13.1使用C Make构建VisualStudio 2017项目
13.2交叉编译helloworld示例
13.3使用OpenMP并行化交叉编译Windows二进制文件
14.1将测试部署到C Dash
14.2CDash显示测试覆盖率
14.3使用Address San i fier向C Dash报告内存缺陷
14.4使用ThreadS an ii ser向C Dash报告数据争用
15