首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

1700

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

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

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

CPack 入门指南

[Cpack01.png] 背景 CPackCMake 2.4.2 之后一个内置工具,用于创建软件二进制和源代码CPack 在整个 CMake 工具链位置。...选择 CPack 原因 C++ 工程大部分都是用 CMake 配置编译, 而 CPackCMake 内置工具,支持打包成多种格式安装。...编译完成后,执行 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.2K40

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.4K40

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

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

70700

算法部署 | 万字长文带你从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.3K30

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

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

8K52

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

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

900

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.1K20

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 文件, 把里面的内容全复制,拷贝到附加依赖

7.5K52

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

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

300

漫谈C++ - 实践之路

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

17530

opencv2.4.9:为caffe编译精简opencv_core,opencv_imgproc,opencv_highgui全静态库

caffe只用到OpenCV很小一部功能 ,具体就是opencv_core,opencv_imgproc,opencv_highgui三个库,用于图像读写,如果能将这个三个库全静态编译,就能让caffe在运行时不再依赖...但是opencv_highgui库在读写jpeg,png,tiff,jpeg2000图像格式时用到了第三方编解码库,默认编译opencv时opencv_highgui是动态连接系统图像编解码库(/...其实opencv源码3rdparty文件夹下本就包含了这些图像解码库,只要在cmake生成Makefile脚本时指定编译这些库就好了。...# -DBZIP2_LIBRARIES定义bzip2库位置 cmake ....编译出caffe,用ldd命令查看,可以看出已经没有对opencv任何依赖了,如下图: ?

2.1K70

linux下用cmake对caffe静态编译时-static-libstdc++参数无效问题

以下是用于cmake 生成 Makefile文件对Caffe进行静态库连接编译shell脚本, #!...以静态库形式连接,然而在实际使用过程发现当指定 USE_OPENCV=on(即使用OpenCV,opencv已经预先做了静态库编译)时,编译出caffe,用ldd查看还是会依赖libstdc++.so...这个问题困扰了几天,后来通过比较.dir下link.txt(cmake生成),发现,当USE_OPENCV=on时生成link.txt,自动在opencv静态库加了-lstdc...于是果然在cmake生成Makefile后,添加了如下代码,则问题解决: # 修改所有 link.txt 删除-lstdc++ 选项,保证静态连接libstdc++库,否则在USE_OPENCV=on情况下...依赖关系显示如下,除了系统库之外,不再依赖任何其他动态库,文件大小也达到28MB。

6.6K60

CMake使用教程和原理

CMake是具有管理依赖依赖之间关系。如果变更了源文件,必须重新构建所有依赖该源文件脚本。 并且要求高效依赖关系解析是耗时短。...通常,项目具有指向根目录位置PROJECT_ROOT环境变量。还有配置可选或外部程序。要使构建正常进行,每次执行构建时都需要设置所有这些外部变量。所有CMakeFile在配置阶段解决了这个问题。...image.png image.png 2.2 生成阶段 在生成阶段,cmake使用了一套语法解析系统,关键类图如下。cmMakefile对象存错了CMakeLists.txt所有输入变量。...image.png 2.3 依赖管理和更新构建 CMake在使用IDE平台不生成依赖,这些依赖由IDE自己完成。...:查找dir路径下所有源文件,保存到variable变量.

10.7K296
领券