Cmake 实践
3,问题,难道就没有问题? 1,cmake 很简单,但绝对没有听起来或者想象中那么简单。 2,cmake 编写的过程实际上是编程的过程,跟以前使用 autotools 一样,不过你需要编 写的是 CMakeLists.txt(每个目录一个) ” ,使用的是 cmake ” 语言和语法 。 3,cmake 跟已有体系的配合并不是特别理想,比如 pkgconfig,您在实际使用中会有所 体会,虽然有一些扩展可以使用,但并不理想。 t1 在 t1 目录建立 main.c 和 CMakeLists.txt(注意文件名大小写): main.c 文件内容: //main.c #includeint main() { printf(“Hello World from t1 Main!\n”); return 0; } CmakeLists.txt 文件内容: PROJECT (HELLO) "${HELLO_SOURCE_DIR}) ADD_EXECUTABLE(hello SRC_LIST) 2,开始构建 所有的文件创建完成后,t1 目录中应该存在 main.c 和 CMakeLists.txt 两个文件 接下来我们来构建这个工程,在这个目录运行: cmake . (注意命令后面的点号,代表本目录)。 输出大概是这个样子: -- Check for working C compiler: 0 码力 | 47 页 | 264.27 KB | 1 年前3C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南
是一个跨平台的构建系统,可以从 CMakeLists.txt 生成不同类型的构建系 统(比如 Linux 的 make , Windows 的 MSBuild ),从而让构建规则可以只写一份,跨平 台使用。 • 过去的软件(例如 TBB )要跨平台,只好 Makefile 的构建规则写一份, MSBuild 也写一份 。 • 现在只需要写一次 CMakeLists.txt ,他会视不同的操作系统,生成不同构建系统的规则文件。 ,他会视不同的操作系统,生成不同构建系统的规则文件。 • 那个和操作系统绑定的构建系统( make 、 MSBuild )称为本地构建系统( native buildsystem )。 • 负责从 CMakeLists.txt 生成本地构建系统构建规则文件的,称为生成器( generator )。 -G 选项:指定要用的生成器 • Linux 系统上的 CMake 默认用是 Unix Makefiles 生成器; 模式。 大多数 CMakeLists.txt 的开头都会有这样三行,为的是让默认的构建类 型为发布模式(高度优化)而不是默认的调试模式(不会优化)。 我们稍后会详细捋一遍类似于 CMAKE_BUILD_TYPE 这样的东西。绝 大多数 CMakeLists.txt 开头都会有的部分,可以说是“标准模板”了。 project :初始化项目信息,并把当前 CMakeLists.txt 所在位置作为根0 码力 | 166 页 | 6.54 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南
项目,如何优雅地、模块化地组织大量源文件 ? 推荐的目录组织方式 • 目录组织格式: • 项目名 /include/ 项目名 / 模块名 .h • 项目名 /src/ 模块名 .cpp • CMakeLists.txt 中写: • target_include_directories( 项目名 PUBLIC include) • 源码文件中写: • #include < 项目名 / 模块名 .h> • 左图的案例中,我们在根目录下,创建了 两个子项目 biology 和 pybmain ,他们 分别在各自的目录下有自己的 CMakeLists.txt 。 二、根项目的 CMakeLists.txt 配置 • 在根项目的 CMakeLists.txt 中,设置了默 认的构建模式,设置了统一的 C++ 版本 等各种选项。然后通过 project 命令初始 化了根项目。 • 随后通过 把两个子项 目 pybmain 和 biology 添加进来(顺序 无关紧要),这会调用 pybmain/CMakeLists.txt 和 biology/CMakeLists.txt 。 三、子项目的 CMakeLists.txt 配置 • 子项目的 CMakeLists.txt 就干净许多,只是创建了 biology 这个静态库对象,并通过 GLOB_RECRUSE 为他批量添加0 码力 | 56 页 | 6.87 MB | 1 年前3Debian 维护者指南
的介绍(autoconf、automake 和 libtool) • Autotools 流言终结者 5.18.2 CMake 使用 CMake 通常也包含四个步骤。 1. 设置构建系统(“vim CMakeLists.txt config.h.in”) 2. 配置构建系统(“cmake”) 3. 构建源码树(“make”) 4. 安装二进制文件(“make install”) 上游源码包(tarba CMake(单个二进制软件包) 此处是一个从简单的 C 语言源码程序生成简单的 Debian 软件包的示例,我们假设上游使用 CMake (CMakeLists.txt 和若干形似 config.h.in 的文件)作为构建系统。参见 Section 5.18.2。 cmake 命令根据 CMakeLists.txt 文件和它的 -D 选项来生成 Makefile 文件。此外,它还会根据 config- ure_file(…) tar.gz $ tree . +-- debhello-1.7 | +-- CMakeLists.txt | +-- LICENSE | +-- data | | +-- hello.desktop | | +-- hello.png | +-- man | | +-- CMakeLists.txt 108 CHAPTER 8. 更多示例 8.10. CMAKE(单个二进制软件包)0 码力 | 142 页 | 1.11 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起
CMake ) • 为了解决 make 的以上问题,跨平台的 CMake 应运而生! • make 在 Unix 类系统上是通用的,但在 Windows 则不然。 • 只需要写一份 CMakeLists.txt ,他就能够在调用时生成当前系统所支持的构建系统。 • 需要准确地指明每个项目之间的依赖关系,有头文件时特别头疼。 • CMake 可以自动检测源文件和头文件之间的依赖关系,导出到 Makefile 可以自动检测当前的编译器,需要添加哪些 flag 。比如 OpenMP ,只需要在 CMakeLists.txt 中指明 target_link_libraries(a.out OpenMP::OpenMP_CXX) 即可。 输出的可执行文件 输入的多个源文件 CMake 的命令行调用 • 读取当前目录的 CMakeLists.txt ,并在 build 文件夹下生成 build/Makefile : • hellolib 文件夹下了,里面的 CMakeLists.txt 定义了 hellolib 的生成规则。 • 要在根目录使用他,可以用 CMake 的 add_subdirectory 添加子目录,子目录也包含一 个 CMakeLists.txt ,其中定义的库在 add_subdirectory 之后就可以在外面使用。 • 子目录的 CMakeLists.txt 里路径名(比如 hello.cpp0 码力 | 32 页 | 11.40 MB | 1 年前3Kicad 5.1 插件
对于 OS X,此处显示的 FindPackage 脚本可能需要进行一些调整。 要配置和构建教程代码,我们将使用 CMake 并创建一个 ‘CMakeLists.txt’ 脚本 文件: cd ${DEMO_ROOT} cat > CMakeLists.txt << _EOF # 声明项目名称 # declare the name of the project project( PLUGIN_DEMO 件不处理文件内容; 相反,插件只是创建一个包含一对四面体的场景图。 本教 程假定第一个教程已完成,并且已创建 CMakeLists.txt 和 FindKICAD.cmake 脚 本文件。 将新的源文件放在与上一个教程的源文件相同的目录中,我们将扩展上一个教 程的 CMakeLists.txt 文件来构建本教程。 由于这个插件会为 KiCad 创建一个场 景图,我们需要链接到 KiCad 的场景图库 场景图对象是 3D 缓存管理器使用的中 间数据可视化格式。 所有支持模型可视化的插件都必须通过此库将模型数据 转换为场景图。 第一步是扩展 ‘CMakeLists.txt’ 来构建这个教程项目: cd ${DEMO_ROOT} cat >> CMakeLists.txt << _EOF add_library( s3d_plugin_demo2 MODULE src/s3d_plugin_demo20 码力 | 56 页 | 49.46 KB | 1 年前3Kicad 5.1 插件
OS X,此 处显示的 FindPackage 脚本可能需要进行一些调整。 要配置和构建教程代码,我们将使用 CMake 并创建一个‘CMakeLists.txt’脚本文件: cd ${DEMO_ROOT} cat > CMakeLists.txt << _EOF # b'' 声 b''b'' 明 b''b'' 项 b''b'' 目 b''b'' 名 b''b'' 称 b'' # declare 插件不处理文件内容; 相反,插件只是创建一个包含一对四面体的场景图。本教程假定第一个教程已完成,并且已创 建 CMakeLists.txt 和 FindKICAD.cmake 脚本文件。 将新的源文件放在与上一个教程的源文件相同的目录中,我们将扩展上一个教程的 CMakeLists.txt 文件来构建本教 程。由于这个插件会为 KiCad 创建一个场景图,我们需要链接到 KiCad 的场景图库‘kicad_3dsg’。KiCad 场景图对象是 3D 缓存管理器使用的中间数据可视化格式。所有支持模型 可视化的插件都必须通过此库将模型数据转换为场景图。 第一步是扩展‘CMakeLists.txt’来构建这个教程项目: cd ${DEMO_ROOT} cat >> CMakeLists.txt << _EOF add_library( s3d_plugin_demo2 MODULE src/s3d_plugin_demo20 码力 | 45 页 | 612.98 KB | 1 年前3Greenplum 编译安装和调试
首先启动 clion,导入 Greenplum 源代码项目。clion 需要 CMakeLists.txt 文件构建工程项目。将 下面的 CMakeLists.txt 放到 Greenplum 源代码目录的顶层目录中,再启动 clion 既可建立合适的 工程项目。 $ cat CMakeLists.txt cmake_minimum_required(VERSION 3.8) project(gpdb)0 码力 | 15 页 | 2.07 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程
编译器重复编译很 多遍,每次针对不同的架构,所以编译会 变得非常慢,生成的可执行文件也会变大 。 • 通常在自己的电脑上用时,同学们只要根 据自己显卡的指定一个版本号即可。 如果 CMakeLists.txt 里没有指定,也可以从命令行参数指定 : 版本号和商品名对照表 • 版本 52 : Quadro M6000 , GeForce 900, GTX-970, GTX-980, GTX 个文件: • /opt/cuda/samples/common/inc/helper_cuda.h • 把他和 helper_string.h 一起拷到头文件目录里,然后改一 下 CMakeLists.txt 让他包含这个头文件目录。 • 他定义了 checkCudaErrors 这个宏,使用时只需: • checkCudaErrors(cudaDeviceSynchronize())0 码力 | 142 页 | 13.52 MB | 1 年前3古月《ROS入门21讲》11.订阅者Subscriber的编程实现.pdf
订阅者Subscriber的编程实现 主 讲 人 : 古 月 话题模型 创建订阅者代码(C++) • • • • pose_subscriber.cpp 配置订阅者代码编译规则 • • CMakeLists.txt 编译并运行订阅者 创建订阅者代码(Python) pose_subscriber.py • • • • 感谢观看 怕什么真理无穷,进一寸有一寸的欢喜 更多精彩,欢迎关注0 码力 | 7 页 | 1.00 MB | 1 年前3
共 48 条
- 1
- 2
- 3
- 4
- 5