C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南CMake 相比,使用 更方便,功能更强大。 为什么要学习现代 CMake ? 现代 CMake : 古代 CMake : 第 0 章:命令行小技巧 传统的 CMake 软件构建 / 安装方式 • mkdir build • cd build • cmake .. • make -j4 • sudo make install • cd .. • 需要先创建 build 目录 build 目录 • 在 build 目录运行 cmake < 源码目录 > 生成 Makefile • 执行本地的构建系统 make 真正开始构建( 4 进程并 行) • 让本地的构建系统执行安装步骤 • 回到源码目录 现代 CMake 提供了更方便的 -B 和 --build 指令,不同平台,统一命 令! • cmake -B build • cmake --build build 设置缓存变量。第二次配置时,之前的 -D 添加仍然会被保留。 • cmake -B build -DCMAKE_INSTALL_PREFIX=/opt/openvdb-8.0 • ↑ 设置安装路径为 /opt/openvdb-8.0 (会安装到 /opt/openvdb-8.0/lib/libopenvdb.so ) • cmake -B build -DCMAKE_BUILD_TYPE=Release • ↑0 码力 | 166 页 | 6.54 MB | 1 年前3
Hello 算法 1.1.0 C++ 版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 第 16 章 附录 362 16.1 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 16.2 一起参与创作 . . . . 第 0 章 前言 hello‑algo.com 6 图 0‑3 运行代码示例 运行代码的前置工作主要分为三步。 第一步:安装本地编程环境。请参照附录所示的教程进行安装,如果已安装,则可跳过此步骤。 第二步:克隆或下载代码仓库。前往 GitHub 仓库。如果已经安装 Git ,可以通过以下命令克隆本仓库: git clone https://github.com/krahets/hello-algo 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 2.2.1 迭代 迭代(iteration)是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某段 代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 第 16 章 附录 364 16.1 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 16.2 一起参与创作 . . . . 第 0 章 前言 hello‑algo.com 6 图 0‑3 运行代码示例 运行代码的前置工作主要分为三步。 第一步:安装本地编程环境。请参照附录所示的教程进行安装,如果已安装,则可跳过此步骤。 第二步:克隆或下载代码仓库。前往 GitHub 仓库。如果已经安装 Git ,可以通过以下命令克隆本仓库: git clone https://github.com/krahets/hello-algo 在算法中,重复执行某个任务是很常见的,它与复杂度分析息息相关。因此,在介绍时间复杂度和空间复杂 度之前,我们先来了解如何在程序中实现重复执行任务,即两种基本的程序控制结构:迭代、递归。 2.2.1 迭代 「迭代 iteration」是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某 段代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合在预先知道迭代次数时使用。0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 第 16 章 附录 362 16.1 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 16.2 一起参与创作 . . . . 章 前言 www.hello‑algo.com 6 图 0‑3 运行代码示例 运行代码的前置工作主要分为三步。 第一步:安装本地编程环境。请参照附录所示的教程进行安装,如果已安装,则可跳过此步骤。 第二步:克隆或下载代码仓库。前往 GitHub 仓库。如果已经安装 Git ,可以通过以下命令克隆本仓库: git clone https://github.com/krahets/hello-algo 基石,而算法为数据结构注入生命力。 ‧ 我们可以将数据结构与算法类比为拼装积木,积木代表数据,积木的形状和连接方式等代表数据结构, 拼装积木的步骤则对应算法。 1. Q & A Q:作为一名程序员,我在日常工作中从未用算法解决过问题,常用算法都被编程语言封装好了,直接用就 可以了;这是否意味着我们工作中的问题还没有到达需要算法的程度? 如果把具体的工作技能比作是武功的“招式”的话,那么基础科目应该更像是“内功”。0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b1 C++版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 12. 附录 180 12.1. 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 12.2. 一起参与创作 . . 若时间允许,强烈建议对照着代码自己敲一遍。相比于读代码,写代码的过程往往能带来新的收获。 0. 写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ‧「暂存数据」用于保存算法运行中的各种 常量、变量、对象 等。 ‧「栈帧空间」用于保存调用函数的上下文数据。系统每次调用函数都会在栈的顶部创建一个栈帧,函数返 回时,栈帧空间会被释放。 ‧「指令空间」用于保存编译后的程序指令,在实际统计中一般忽略不计。 Figure 2‑9. 算法使用的相关空间 /* 结构体 */ struct Node { 2. 复杂度分析 hello‑algo.com 28 int val;0 码力 | 187 页 | 14.71 MB | 1 年前3
《深入浅出MFC》2/e《深入浅出MFC》2/e 电子书开放自由下载 声明 致亲爱的大陆读者 我是侯捷(侯俊杰)。自从华中理工大学于1998/04 出版了我的《深入浅出MFC》 1/e 简体版(易名《深入浅出Windows MFC 程序设计》)之后,陆陆续续我 收到了许多许多的大陆读者来函。其中对我的赞美、感谢、关怀、殷殷垂询, 让我非常感动。 《深入浅出MFC》2/e 早已于1998/05 于台湾出版。之所以迟迟没有授权给大 并没有如期完成,致使大陆读者反而没有《深入浅出MFC》2/e 简体版可看。 《深入浅出MFC》3/e 没有如期完成的原因是,MFC 本体架构并没有什么大改 变。《深入浅出MFC》2/e 书中所论之工具及程序代码虽采用VC5+MFC42,仍 适用于目前的VC6+MFC421(唯,工具之画面或功能可能有些微变化)。 由于《深入浅出MFC》2/e 并无简体版,因此我时时收到大陆读者来信询问购 买繁体版 有侯捷网站的 一个GBK mirror,各位也可试着自该处下载。 我所做的这份电子书是繁体版,我没有精力与时间将它转为简体。这已是我能 为各位尽力的极限。如果(万一)您看不到文件内容,可能与字形的安装有关- 虽然我已尝试内嵌字形。anyway,阅读方面的问题我亦没有精力与时间为您解 决。请各位自行开辟讨论区,彼此交换阅读此电子书的solution。请热心的读者 告诉我您阅读成功与否,以及网上讨论区(如有的话)在哪里。0 码力 | 1009 页 | 11.08 MB | 1 年前3
Hello 算法 1.0.0b2 C++版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 12. 附录 190 12.1. 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 12.2. 一起参与创作 . . 若时间允许,强烈建议对照着代码自己敲一遍。相比于读代码,写代码的过程往往能带来新的收获。 0. 写在前面 hello‑algo.com 5 Figure 0‑4. 运行代码示例 第一步:安装本地编程环境。参照附录教程,如果已有可直接跳过。 第二步:下载代码仓。如果已经安装 Git ,可以通过命令行来克隆代码仓。 git clone https://github.com/krahets/hello-algo.git 当然,你也可以点击“Download ‧「暂存数据」用于保存算法运行中的各种 常量、变量、对象 等。 ‧「栈帧空间」用于保存调用函数的上下文数据。系统每次调用函数都会在栈的顶部创建一个栈帧,函数返 回时,栈帧空间会被释放。 ‧「指令空间」用于保存编译后的程序指令,在实际统计中一般忽略不计。 Figure 2‑9. 算法使用的相关空间 /* 结构体 */ struct Node { 2. 复杂度分析 hello‑algo.com 28 int val;0 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.0.0b5 C++版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 第 16 章 附录 368 16.1 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 16.2 一起参与创作 . . . . 与阅读代码相比,编写代码的过程往往能带来更多收获。动手学,才是真的学。 图 0‑3 运行代码示例 运行代码的前置工作主要分为三步。 第一步:安装本地编程环境。请参照附录教程进行安装,如果已安装则可跳过此步骤。 第二步:下载代码仓。如果已经安装 Git ,可以通过以下命令克隆本仓库。 git clone https://github.com/krahets/hello-algo.git 迭代与递归 在数据结构与算法中,重复执行某个任务是很常见的,其与算法的复杂度密切相关。而要重复执行某个任务, 我们通常会选用两种基本的程序结构:迭代和递归。 2.2.1 迭代 「迭代 iteration」是一种重复执行某个任务的控制结构。在迭代中,程序会在满足一定的条件下重复执行某 段代码,直到这个条件不再满足。 1. for 循环 for 循环是最常见的迭代形式之一,适合预先知道迭代次数时使用。0 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0b4 C++版. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 16. 附录 335 16.1. 编程环境安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 16.2. 一起参与创作 . . . 。如果时间充裕,建议参照代码自行敲一遍。与仅阅读 代码相比,编写代码的过程往往能带来更多收获。 Figure 0‑3. 运行代码示例 第一步:安装本地编程环境。请参照附录教程进行安装,如果已安装则可跳过此步骤。 第二步:下载代码仓。如果已经安装 Git ,可以通过以下命令克隆本仓库。 git clone https://github.com/krahets/hello-algo.git 对象等。 ‧「栈帧空间」用于保存调用函数的上下文数据。系统在每次调用函数时都会在栈顶部创建一个栈帧,函 数返回后,栈帧空间会被释放。 ‧「指令空间」用于保存编译后的程序指令,在实际统计中通常忽略不计。 因此,在分析一段程序的空间复杂度时,我们一般统计 暂存数据、输出数据、栈帧空间 三部分。 Figure 2‑9. 算法使用的相关空间 /* 结构体 */ struct Node { int0 码力 | 343 页 | 27.39 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南中则是基于定义者所在路径,优先访问定义者的作用域。这里需要 set(key val PARENT_SCOPE) 才能修改到外面的变量。 第二章:第三方库 / 依赖项配置 用 find_package 寻找系统中安装的第三方库并链接他们 find_package 命令 • 常用参数列表一览: • find_package([version] [EXACT] [QUIET] [CONFIG] find_package(Qt5) 则是会去找名为 Qt5Config.cmake 的文件。 • 这些形如 包名 + Config.cmake 的文件,我称之为包配置文件。 • Qt5Config.cmake 是你安装 Qt5 时,随 libQt5Core.so 等实际的库文件,一起装到你的 系统中去的。以我的 Arch Linux 系统为例: • 包配置文件位于 /usr/lib/cmake/Qt5/Qt5Config 包配置文件由第三方库的作者( Qt 的开发团队)提供,在这个库安装时( Qt 的安装程序 或 apt install 等)会自动放到 /usr/lib/cmake/XXX/XXXConfig.cmake 这个路径(其中 XXX 是包名),供 CMake 用户找到并了解该包的具体信息。 • /usr/lib/cmake 这个位置是 CMake 和第三方库作者约定俗成的,由第三方库的安装程序 负责把包配置文件放到这里。如果第三方库的作者比较懒,没提供 0 码力 | 56 页 | 6.87 MB | 1 年前3
共 27 条
- 1
- 2
- 3













