首页
学习
活动
专区
圈层
工具
发布

CMake 秘籍(六)

如果库维护者提供了适当的 CMake 配置文件,那么所有依赖项都可以很容易地用很少的 CMake 命令来解决。...我们将单独分析message-shared目标的 CMake 命令,但这里的讨论是通用的: 在项目构建中生成目标并布置其依赖项。...-Linux.tar.gz message-1.0.0-Linux.zip 工作原理 CPack 可以用来生成许多不同类型的包用于分发。...() endif() 我们的示例依赖于 UUID 库,CPACK_DEBIAN_PACKAGE_DEPENDS和CPACK_RPM_PACKAGE_REQUIRES选项允许我们在我们的包和其他数据库中的包之间指定依赖关系...在本节中,我们将为使用 CMake 配置和构建的非常简单的 C++示例项目准备一个 Conda 包,该项目没有除 C++之外的其他依赖项。在下一节中,我们将准备并讨论一个更复杂的 Conda 包。

93600

面向 C++ 的现代 CMake 教程(四)

总结:为用户生成文档或处理需要时的依赖项添加。这在本章第七章,使用 CMake 管理依赖项中有所涵盖,所以我们在这里不会重复这些步骤。...安装可以由许多步骤组成,但它们的本质是将生成的工件和必要的依赖项复制到系统上的某个目录中。...包的所有必需的子依赖项也必须在包配置文件中找到。...如何在install()命令中使用组件 一些生成的工件可能不需要在所有场景中都进行安装。例如,一个项目可能为了开发目的安装静态库和公共头文件,但默认情况下,它只需安装共享库以供运行时使用。...对于终端用户来说,一种更加便捷的软件分发方式是使用包含编译工件和其他运行时所需静态文件的二进制包。CMake 通过名为cpack的命令行工具支持生成多种此类包。

1.5K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CPack 入门指南

    [Cpack01.png] 背景 CPack 是 CMake 2.4.2 之后的一个内置工具,用于创建软件的二进制包和源代码包。 CPack 在整个 CMake 工具链的位置。...选择 CPack 的原因 C++ 工程大部分都是用 CMake 配置编译, 而 CPack 是 CMake 内置的工具,支持打包成多种格式的安装包。...编译完成后,执行 cpack -G RPM 就可将文件打包成 rpm 包,当前目录下会生成一个 _CPack_Packages 目录和一个以 .rpm 为后缀名的文件 example-1.0.0-Linux.rpm...上面配置生成的安装包 example-1.0.0-Linux.rpm里面包含的文件如下: [Cpack03.png] ⚠️注意:假如安装时出现 file /home from install of example...分装多个包 上述配置是将所有需要打包的文件打包成一个安装包,但一个项目往往会有多个不同服务,在实施部署时需安装到不同的机子上,这个时候如果把所有服务一起打包,会导致部署时包太大。

    2.9K51

    万字总结编译利器CMake,从入门到项目实战演练

    虽然在这个教程当中没有什么理由这么做,然而如果使用更大的库或者当依赖于第三方的库时,你或许希望这么做。第一步是要在顶层的CMakeLists文件中加上一个选择项。...这个模块将会包含当前平台所需要的所有运行时库。接下来,我们设置了一些CPack的变量来保存license以及工程的版本信息。版本信息利用了我们在早前的教程中使用到的变量。...导入一个CMake项目(消费者) 本示例说明项目如何查找生成Config.cmake文件的其他CMake软件包。 它还显示了在生成Config.cmake时如何声明项目的外部依赖关系。...但是可以将CPack设置为同时捆绑多个构建目录,以构建一个包含同一项目的多个配置的软件包。 首先,我们需要构建一个名为multi_config的目录,该目录将包含我们要打包在一起的所有构建。...生成二进制安装包: cpack -C CPackConfig.cmake 生成源码安装包 cpack -C CPackSourceConfig.cmake 我们可以试一下。

    1.6K00

    CMake入门实战——生成安装包

    生成安装包 本节将学习如何配置生成各种平台上的安装包,包括二进制安装包和源码安装包。为了完成这个任务,我们需要用到 CPack ,它同样也是由 CMake 提供的一个工具,专门用于打包。...生成二进制安装包: cpack -C CPackConfig.cmake 生成源码安装包 cpack -C CPackSourceConfig.cmake 我们可以试一下。...Linux.tar.gz Demo8-1.0.1-Linux.tar.Z 这 3 个二进制包文件所包含的内容是完全相同的。...此时会出现一个由 CPack 自动生成的交互式安装界面: xuke@ubuntu:~/work/cmake-demo/Demo8$ sh Demo8-1.0.1-Linux.sh Demo8 Installer...Unpacking finished successfully 完成后提示安装到了 Demo8-1.0.1-Linux 子目录中,我们可以进去执行该程序: xuke@ubuntu:~/work/cmake-demo

    1.9K50

    算法部署 | 万字长文带你从C++案例一步一步实操cmake(起飞系列)

    CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化Makefile和工程文件,如...在linux平台下使用CMake生成Makefile并编译的流程如下: 编写 CMake 配置文件 CMakeLists.txt; 执行命令cmake PATH或者ccmake PATH生成Makefile...本节将学习如何配置生成各种平台上的安装包,包括二进制安装包和源码安装包。...生成二进制安装包: sudo cpack -C CPackConfig.cmake 生成源码安装包: sudo cpack -C CPackSourceConfig.cmake 我们可以试一下。...Linux.sh Test_Demo8-1.0.1-Linux.tar.Z Test_Demo8-1.0.1-Linux.tar.gz 这 3 个二进制包文件所包含的内容是完全相同的。

    1.6K30

    CMake---优雅的构建CC++软件项目实践(1)

    这里概括性说明下常用的cmake知识,总的来说cmake的作用就是让我们找到依赖的头文件和库文件,去编译源文件、链接目标文件(静态库也是目标文件的一个集合),最后生成可执行文件或动/静态库: INCLUDE_DIRECTORIES...将给定的目录添加到编译器用于搜索包含文件(如头文件)的目录中,相对路径被解释为相对于当前源目录。...除此之外,C/C++ 程序员长期以来手动管理依赖,即手动查找、安装依赖,再配置构建工具(如 cmake)使用依赖。...ENDIF() ENDMACRO() 注意:如SPDLOG_LIBS变量如果宏函数在根目录CMakeLists中调用,所以变量作用域可以作用到所有子目录,如果不是在根目录调用,则需要设置PARENT_SCOPE...demo,tests/CMakeLists.txt会自动将tests目录下所有源文件逐个进行可执行文件生成构建。

    8.7K52

    面向 C++ 的现代 CMake 教程(五)

    构建和管理依赖项 所有的构建过程都是相同的。我们从顶层列表文件开始,向下导航到项目源树。图 12.4 显示了哪些项目文件参与构建。...再次,我们将推迟讨论测试和文档,而是查看依赖管理和构建信息生成。 请注意,我们倾向于使用实用模块而不是 find-module 来引入 FTXUI。这是因为这个依赖项不太可能已经存在于系统中。...——我们可以构建它,测试它,生成包,将所有源代码上传到仓库,并发布工件。...接下来,我们简要介绍了如何使用 Doxygen 生成文档以及如何使其更具吸引力。最后,我们展示了如何将项目安装到系统上,创建可重用的 CMake 包,以及如何配置和使用 CPack 生成二进制包。...为指定文件获取运行时依赖项。这是一个仅在 install(CODE) 或 install(SCRIPT) 场景中使用的高级命令。

    61200

    Win 7 64位VS2010 PCL 1.6.0和1.8.0配置步骤

    刚接触PCL两个月,在群主和群友的帮助下完成了PCL1.6.0 和1.8.0的配置,这里记录了我配置过程中的问题,可能很小白,不足之处希望各位见谅指正。...Win7 64位下PCL1.6.0+VS2010+cmake+QT 参考文章(附软件安装包,很全面):https://segmentfault.com/a/1190000003988970 软件准备:...库里面依赖函数的关系不对应,我的QT版本是Qt4.8.6所以必须修改这些依赖函数。...然后用cmake编译,运行sln,步骤同1.6.0一样 文章都是道友在配置过程中遇到的问题和解决办法,可以借鉴参考学习。...还有许多来问关于在VS中配置PCL的错误的解决办法,不能一一解答请谅解,请大家翻看之前许多的分享文章参考借鉴。

    1.3K20

    PCL1.8.1+vs2015配置教程

    其中的VTK是一个可视化工具包,就是显示点云用的,一般会和Qt结合一起用,但是这里安装的VTK是还没有和QT一起编译的,所以这两个还不能结合一起用的,需要用CMake编译工具编译,这就是为什么安装完成了还要用...D:\PCL1.8.1\PCL1.8.1\3rdParty\VTK\lib ③点击“链接器”->“输入”->“附加依赖项”,进行编辑,添加lib文件。...④提取文件夹中.lib文件名到文本中 分别粘贴复制静态链接库名到文本甚是麻烦,故通过批处理来完成 例如要获取目录中D:\PCL 1.8.1\3rdParty\VTK\lib下的所有静态链接库文件名并存储至文本...五、用CMake编译下载的PCL中第三方库VTK的源码 目的:编译后就可以适应Qt和VTK的结合 好处:CMake有个好处就是编译中如果前期的配置出现了问题,导致编译出现问题,直接将编译生成的文件夹删掉...小技巧: 在lib文件夹下新建一个文本文档,把下面的语句放进去,保存,改后缀名为 bat,双击,看看是不是多了一个 LIBLIST.txt 文件, 把里面的内容全复制,拷贝到附加依赖项中。

    8K52

    CMake构建学习笔记25-SpatiaLite库的构建

    因为SpatiaLite及其依赖库很多都是老牌的C库,这种库由于年代的原因一般都不提供CMake的构建方式,在Windows下提供的构建方式一般是基于nmake的。...nmake其实只是一个简单的make系统,对应的就是Linux下的Makefile,可以进行编译、链接,也可以把构建参数提取出来,但是无法动态去生成构建参数。...需要注意的是,makefile64.vc中的内容需要根据依赖库的安装地址来进行修改。...SpatiaLite的依赖项有:proj、geos、freexl、iconv、sqlite3、zlib、libxml2以及librttopo,这些依赖项都需要提前安装好,笔者是安装到C:\Work\3rdparty...-SQLite库的构建》 《CMake构建学习笔记2-zlib库的构建》 《CMake构建学习笔记22-libxml2库的构建》 剩下的就只有freexl和librttopo两个依赖性的构建了,正好这两个也是依赖于

    10210

    漫谈C++ - 实践之路

    CMake官方版是用于控制软件使用简单的平台和编译器编译过程独立配置文件。CMake生成本机makefile和工作区,可以使用用户所选择的编译器环境。...conan:包管理工具localfile:将源码到本地,通常万无一失唯一可能导致源码包过大。注意:依赖库管理,通常要注意版本管理,以及在跨平台的时候要注意依赖库的包是否可使用或者支持编译通过。...打包打包通常是一个项目最后收尾,你要保证你的包要在各种环境下要稳定的运行,所以打包也比较考验一个人的经验,什么是系统底层包,不需要打包进去,又在什么情况下需要所有的打包进去,以及运行脚本的编写,文件目录等都需要考虑到...打包即生成对应的安装包.qt对应的安装包:windeployqt,linuxdeployqt,这是博主的一篇博文 linuxdeployqt-linux下Qt打包工具shell命令打包 : 就是一些基础命令的组合以及打包...checkinstall: checkinstall-简易打包工具cmake: cpack - CMake -- CPack工具dpkg/rpm等系统对应的打包解包工具自动化部署通常都是使用jenkins

    35130

    面向 C++ 的现代 CMake 教程(一)

    第七章,使用 CMake 管理依赖项,解释了现代 CMake 中可用的依赖管理方法。...它告诉 CMake 关于项目结构、目标和依赖项(库和其他 CMake 包)。在这个过程中,CMake 将在构建树中存储收集的信息,如系统详细信息、项目配置、日志和临时文件,供下一步使用。...这些都是自给自足的捆绑包,包含了一个软件以及它所有的库、依赖项和运行它所需的工具。Docker 在其轻量级环境中执行其容器,彼此之间是隔离的。...查找模块 在包的配置文件部分,我提到 CMake 有一个机制,允许它找到属于外部依赖项的文件,这些依赖项不支持 CMake 并且没有提供 CMake 配置文件(或者还没有)。查找模块就是为了这个目的。...在此之后,它定义了变量(如该模块手册中所指定的)允许你针对该依赖项进行构建。

    2K01
    领券