C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南
现代 CMake 模块化项目管理指南 彭于斌( @archibate ) 课件 & 源码: https://github.com/parallel101/course 往期录播: https://space.bilibili.com/263032155 找不到头文 件怎么办呀 CMake Cookbook 小彭老师建议 : ~~-·~·~-·~ -~·-·~·- 第一章:文件 / 项目,如何优雅地、模块化地组织大量源文件 ? 推荐的目录组织方式 • 目录组织格式: • 项目名 /include/ 项目名 / 模块名 .h • 项目名 /src/ 模块名 .cpp • CMakeLists.txt 中写: • target_include_directories( 项目名 PUBLIC include) • 源码文件中写: • #include < 项目名 / 模块名 .h> 推荐的目录组织方式 • 头文件(项目名 /include/ 项目名 / 模块名 .h )中写: • #pragma once • namespace 项目名 { • void 函数名 (); • } • 实现文件(项目名 /src/ 模块名 .cpp )中写: • #include < 项目名 / 模块名 .h> • namespace 项目名 { • void 函数名 ()0 码力 | 56 页 | 6.87 MB | 1 年前3《深入浅出MFC》2/e
难懂,读起来非常吃力 是不是有其它书讲得比较简单的?我不是计算机科系学生,只是 对计算机程序设计有兴趣,一路由basic -> FORTRAN -> C -> C++ 走来... szu.bbs@bbs.es.ncku.edu.tw:是的,第三章也许是世界末日,当初我看的时候也是跳过不 看,不然就是看完frame1 后就说再见了。但是你只要很努力地慢慢看,一步一步地看, 你就会发现后面的章节是那么清楚明了 import 函数库。如果联结此一函数库,你的程序执行时必须有MSVCRT40.DLL 在场。 另一组函数,Windows API,由操作系统本身(主要是Windows 三大模块GDI32.DLL 和 USER32.DLL 和KERNEL32.DLL)提供(注)。虽说动态联结是在执行时期才发生「联 6 结」事实,但在联结时期,联结器仍需先为调用者(应用程序本身)准备一些适当的信 息,才能够在执行时期顺利「跳」到DLL 执行。如果该API 所属之函数库尚未加载, 系统也才因此知道要先行加载该函数库。这些适当的信息放在所谓的「import 函数库」 中。32 位Windows 的三大模块所对应的import 函数库分别为GDI32.LIB 和USER32.LIB 和KERNEL32.LIB。 注:谁都知道,Windows 95 是16/32 位的混合体,所以旗下除了32 位的GDI320 码力 | 1009 页 | 11.08 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南
CMAKE_CURRENT_BINARY_DIR 表示当前输出目录的位置,例如 ~/hellocmake/build 。 project :初始化项目信息,并把当前 CMakeLists.txt 所在位置作为根 目录 和子模块的关系: PROJECT_x_DIR 和 CMAKE_CURRENT_x_DIR 的 区别 PROJECT_SOURCE_DIR 表示最近一次调用 project 的 CMakeLists.txt CMAKE_SOURCE_DIR 表示最为外层 CMakeLists.txt 的源码根目录。 利用 PROJECT_SOURCE_DIR 可以实现从子模块里直接获得项目最外层目录的路径。 不建议用 CMAKE_SOURCE_DIR ,那样会让你的项目无法被人作为子模块使用。 其他相关变量 • PROJECT_SOURCE_DIR :当前项目源码路径(存放 main.cpp 的地方) • PROJECT_BINARY_DIR https://cmake.org/cmake/help/latest/command/project.html 子模块里也可以用 project 命令,将当前目录作为一个独立的子项目 这样一来 PROJECT_SOURCE_DIR 就会是子模块的源码目录而不是外层了。 这时候 CMake 会认为这个子模块是个独立的项目,会额外做一些初始化。 他的构建目录 PROJECT_BINARY_DIR 也会变成 build/<0 码力 | 166 页 | 6.54 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起
Fortran GNU gcc g++ gfortran LLVM clang clang++ flang 多文件编译与链接 • 单文件编译虽然方便,但也有如下缺点: 1. 所有的代码都堆在一起,不利于模块化和理解。 2. 工程变大时,编译时间变得很长,改动一个地方就得全部重新编译。 • 因此,我们提出多文件编译的概念,文件之间通过符号声明相互引用。 • > g++ -c hello.cpp -o 这样当预处理器第二次读到同一个文件时,就会自动跳过 • 通常头文件都不想被重复导入,因此建议在每个头文件前加上这句话 头文件进阶 - 递归地使用头文件(再续) (自动跳过) CMake 中的子模块 • 复杂的工程中,我们需要划分子模块,通常一个库一个目录,比如: • 这里我们把 hellolib 库的东西移到 hellolib 文件夹下了,里面的 CMakeLists.txt 定义了 hellolib 的生成规则。 ,其中定义的库在 add_subdirectory 之后就可以在外面使用。 • 子目录的 CMakeLists.txt 里路径名(比如 hello.cpp )都是相对路径,这也是很方便的一 点。 子模块的头文件如何处理 • 因为 hello.h 被移到了 hellolib 子文件夹里,因此 main.cpp 里也要改成: • 如果要避免修改代码,我们可以通过 target_include_directories0 码力 | 32 页 | 11.40 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅
CMake 中使用: find_package CMake 中使用:作为子模块 这个什么“勾勾”公司非要默认开启 tests ,导致需要去寻找 googletest ,妨碍了我们作为子模块使用。 小彭老师单方面宣布:一切默认开启 tests , docs 构建目标的 cmake 项目,有病啊! 你妨碍别人作为子模块用你的项目。没错说的就是你 OpenSim ,张心欣当时浪费好多时间伺候这个沙雕库。0 码力 | 116 页 | 15.85 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器
Python 作为老牌胶水语言,为了 用户体验做了些特殊处理。他的 ast 模块能自动识别 [] 位于等号左侧还是右侧,分成两个独立的函数 。 • 如果等号在左侧,则被他的 ast 模块视为写入上下文( store context ),翻译成 __setitem__ 。 • 如果等号在右侧,则被他的 ast 模块视为读取上下文( load context ),翻译成 __getitem__ 。0 码力 | 90 页 | 8.76 MB | 1 年前3现代C++ 教程:高速上手C++11/14/17/20
概念与约束 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sortable 的类型名 void sort(T& c) 80 模块 第 10 章展望:C++20 简介 甚至于直接将其作为类型来使用: void sort(Sortable& c); // c 是一个 Sortable 类型的对象 我们现在来看一个实际的例子。 TODO: https://godbolt.org/z/9liFPD 模块 TODO: 合约 TODO: 范围 TODO:0 码力 | 83 页 | 2.42 MB | 1 年前3面向亿行 C/C++ 代码的静态分析系统设计及实践-肖枭
大量使用缓存 提升静态分析的理论速度 如何做到10分钟反馈分析结果 系统地改进分析时间 编译流程 分析流程 依赖关系分析 分布式 编译 分布式 分析 分布式链接 跨模块分析 报告整合 缓存 缓存 缓存 缓存 硬核玩家:从理论上改进静态分析能力 PLDI 2018: 去掉路径 遍历分析中的冗余 ICSE 2019:路径遍历内 存泄漏分析的多项式算法0 码力 | 39 页 | 6.88 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理
当代: C++17 引入常用数值算法 未来: C++20 引入区间( ranges ) https://zhuanlan.zhihu.com/p/350068132 未来: C++20 引入模块( module ) https://zhuanlan.zhihu.com/p/350136757 未来: C++20 允许函数参数为自动推断( auto ) 未来: C++20 引入协程( coroutine0 码力 | 96 页 | 16.28 MB | 1 年前3Back to Basics: Move Semantics
Other Topics: 一 Systems Architect 一 Technical Manager - SOA - Xand OSFIMotif SOA Faces 题 -千 SOA derpm ES @Cppcon2021 2021-10-27 1 Nico Josuttis | | [alaTtTalzTol col1.push_back (getData()) ; ES 1 daTt[aIa s 4 上aaaIal etDataf) 5 四 GE | col1.push_back (getData()) ; 1 daTtTalIg s 4 上-aarraIal getDatalh |一"aaTEaTzIa ES josuttis | eckstein err0 码力 | 23 页 | 1020.10 KB | 5 月前3
共 87 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9