如果库维护者提供了适当的 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 包。
总结:为用户生成文档或处理需要时的依赖项添加。这在本章第七章,使用 CMake 管理依赖项中有所涵盖,所以我们在这里不会重复这些步骤。...安装可以由许多步骤组成,但它们的本质是将生成的工件和必要的依赖项复制到系统上的某个目录中。...包的所有必需的子依赖项也必须在包配置文件中找到。...如何在install()命令中使用组件 一些生成的工件可能不需要在所有场景中都进行安装。例如,一个项目可能为了开发目的安装静态库和公共头文件,但默认情况下,它只需安装共享库以供运行时使用。...对于终端用户来说,一种更加便捷的软件分发方式是使用包含编译工件和其他运行时所需静态文件的二进制包。CMake 通过名为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...分装多个包 上述配置是将所有需要打包的文件打包成一个安装包,但一个项目往往会有多个不同服务,在实施部署时需安装到不同的机子上,这个时候如果把所有服务一起打包,会导致部署时包太大。
生成安装包 本节将学习如何配置生成各种平台上的安装包,包括二进制安装包和源码安装包。为了完成这个任务,我们需要用到 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
虽然在这个教程当中没有什么理由这么做,然而如果使用更大的库或者当依赖于第三方的库时,你或许希望这么做。第一步是要在顶层的CMakeLists文件中加上一个选择项。...这个模块将会包含当前平台所需要的所有运行时库。接下来,我们设置了一些CPack的变量来保存license以及工程的版本信息。版本信息利用了我们在早前的教程中使用到的变量。...导入一个CMake项目(消费者) 本示例说明项目如何查找生成Config.cmake文件的其他CMake软件包。 它还显示了在生成Config.cmake时如何声明项目的外部依赖关系。...但是可以将CPack设置为同时捆绑多个构建目录,以构建一个包含同一项目的多个配置的软件包。 首先,我们需要构建一个名为multi_config的目录,该目录将包含我们要打包在一起的所有构建。...生成二进制安装包: cpack -C CPackConfig.cmake 生成源码安装包 cpack -C CPackSourceConfig.cmake 我们可以试一下。
2.多个源文件 2.1 同一目录,多个源文件 在1中的cmake添加下面这行: # 查找当前目录下的所有源文件 # 并将名称保存到 DIR_SRCS 变量 aux_source_directory(....CMake 会将当前目录所有源文件的文件名赋值给变量 DIR_SRCS ,再指示变量 DIR_SRCS 中的源文件需要编译成一个名称为 Demo 的可执行文件。...CMakeLists 配置文件中的设置自动生成 config.h 文件。...%d\n", argv[0], Demo_VERSION_MAJOR, Demo_VERSION_MINOR); 7.生成安装包 如何配置生成各种平台上的安装包...,也可以指定二进制与源码安装包: 生成二进制安装包: cpack -C CPackConfig.cmake 生成源码安装包 cpack -C CPackSourceConfig.cmake cpack安装
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 个二进制包文件所包含的内容是完全相同的。
附加依赖项 添加: ?...我在安装pcl过程中,遇到了一些问题,以下是我总结的遇到的问题: 问题1、在VS2010中打开由CMake生成的工程文件,包含ALL_BUILD、bilateral_filter和ZERO_CHECK三个项目...程序运行时异常终止了,想进入调试模式查看问题具体出在什么地方。但编译的时候出现错误提示: ? 解决办法: 1....问题2、启动Cmake2.8生成文件时,点击configer时出现如下问题: ? 解决方法:更新CMake版本就可以了。...解决方法: 打开项目--->属性--->链接器--->输入--->附加依赖项中找到如下选中的三个lib文件,删除即可。 ? 问题解决!
这里概括性说明下常用的cmake知识,总的来说cmake的作用就是让我们找到依赖的头文件和库文件,去编译源文件、链接目标文件(静态库也是目标文件的一个集合),最后生成可执行文件或动/静态库: INCLUDE_DIRECTORIES...将给定的目录添加到编译器用于搜索包含文件(如头文件)的目录中,相对路径被解释为相对于当前源目录。...除此之外,C/C++ 程序员长期以来手动管理依赖,即手动查找、安装依赖,再配置构建工具(如 cmake)使用依赖。...ENDIF() ENDMACRO() 注意:如SPDLOG_LIBS变量如果宏函数在根目录CMakeLists中调用,所以变量作用域可以作用到所有子目录,如果不是在根目录调用,则需要设置PARENT_SCOPE...demo,tests/CMakeLists.txt会自动将tests目录下所有源文件逐个进行可执行文件生成构建。
示例源码 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下: 编写 CMake 配置文件 CMakeLists.txt 执行命令 cmake PATH 或者 ccmake...PATH 生成 Makefile ccmake 和 cmake 的区别在于前者提供了一个交互式的界面。...我的机器上cmake版本是cmake version 2.8.12.2。执行cmake .后报错: ? 2.png 正常执行完cmake后,会在根目录下生成Makefile。...<<Demo_VERSION_MINOR<<endl; 生成安装包 首先在顶层的 CMakeLists.txt 文件尾部添加下面几行: # 构建一个 CPack 安装包 include (InstallRequiredSystemLibraries...生成二进制安装包: cpack -C CPackConfig.cmake ? 6.png 生成源码安装包 cpack -C CPackSourceConfig.cmake
构建和管理依赖项 所有的构建过程都是相同的。我们从顶层列表文件开始,向下导航到项目源树。图 12.4 显示了哪些项目文件参与构建。...再次,我们将推迟讨论测试和文档,而是查看依赖管理和构建信息生成。 请注意,我们倾向于使用实用模块而不是 find-module 来引入 FTXUI。这是因为这个依赖项不太可能已经存在于系统中。...——我们可以构建它,测试它,生成包,将所有源代码上传到仓库,并发布工件。...接下来,我们简要介绍了如何使用 Doxygen 生成文档以及如何使其更具吸引力。最后,我们展示了如何将项目安装到系统上,创建可重用的 CMake 包,以及如何配置和使用 CPack 生成二进制包。...为指定文件获取运行时依赖项。这是一个仅在 install(CODE) 或 install(SCRIPT) 场景中使用的高级命令。
刚接触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的错误的解决办法,不能一一解答请谅解,请大家翻看之前许多的分享文章参考借鉴。
虽然可以使用系统已经编译好的,但是在编译dense_flow的时候发现还依赖opencv_contrib中的库,所以为了避免重新编译系统的OpenCV影响别的用户,我自己编译了一个新的版本的OpenCV...: [/path/to/opencv/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201..._20151201.tgz 文件,并放置到opencv/3rdparty/ippicv/downloads/linux-808b791a6eac9ed78d32a7666804320e/目录下,然后重新运行...编译dense_flow dense_flow依赖于libzip-dev这个包,可以通过系统的包管理器安装。...装完依赖后,开始执行cmake,使用OpenCV_DIR参数来设置OpenCV目录,指向我们自己刚才编译的OpenCV。
其中的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 文件, 把里面的内容全复制,拷贝到附加依赖项中。
1.安装 opencv 所需依赖包 如果后面还要遗漏的,出错再补上 $ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get -y install...配置的时候用到), 这是因为 opencv3以后 SIFT 和 SURF 之类的属性被移到了 contrib 中,执行下面两条指令下载 OpenCV3.2.0 $ wget https://github.com...生成 makefile 文件 $ cd ~/opencv/opencv-3.2.0 $ mkdir build $ cd build/ $ sudo cmake -D CMAKE_BUILD_TYPE...注意cmake的参数不要出错 问题一: 下载包的时候链接超时 CMake Error at 3rdparty/ippicv/downloader.cmake:77 (message): ICV: Failed.../3rdparty/ippicv/downloads/目录下再cmake $ sudo cp ~/software/opencv/ippicv_linux_20151201.tgz ~/opencv
第七章,使用 CMake 管理依赖项,解释了现代 CMake 中可用的依赖管理方法。...它告诉 CMake 关于项目结构、目标和依赖项(库和其他 CMake 包)。在这个过程中,CMake 将在构建树中存储收集的信息,如系统详细信息、项目配置、日志和临时文件,供下一步使用。...这些都是自给自足的捆绑包,包含了一个软件以及它所有的库、依赖项和运行它所需的工具。Docker 在其轻量级环境中执行其容器,彼此之间是隔离的。...查找模块 在包的配置文件部分,我提到 CMake 有一个机制,允许它找到属于外部依赖项的文件,这些依赖项不支持 CMake 并且没有提供 CMake 配置文件(或者还没有)。查找模块就是为了这个目的。...在此之后,它定义了变量(如该模块手册中所指定的)允许你针对该依赖项进行构建。
CMake官方版是用于控制软件使用简单的平台和编译器编译过程独立配置文件。CMake生成本机makefile和工作区,可以使用用户所选择的编译器环境。...conan:包管理工具localfile:将源码到本地,通常万无一失唯一可能导致源码包过大。注意:依赖库管理,通常要注意版本管理,以及在跨平台的时候要注意依赖库的包是否可使用或者支持编译通过。...打包打包通常是一个项目最后收尾,你要保证你的包要在各种环境下要稳定的运行,所以打包也比较考验一个人的经验,什么是系统底层包,不需要打包进去,又在什么情况下需要所有的打包进去,以及运行脚本的编写,文件目录等都需要考虑到...打包即生成对应的安装包.qt对应的安装包:windeployqt,linuxdeployqt,这是博主的一篇博文 linuxdeployqt-linux下Qt打包工具shell命令打包 : 就是一些基础命令的组合以及打包...checkinstall: checkinstall-简易打包工具cmake: cpack - CMake -- CPack工具dpkg/rpm等系统对应的打包解包工具自动化部署通常都是使用jenkins
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的任何依赖了,如下图: ?
以下是用于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。
CMake是具有管理依赖项,依赖之间的关系。如果变更了源文件,必须重新构建所有依赖该源文件的脚本。 并且要求高效的依赖关系解析是耗时短的。...通常,项目具有指向根目录位置的PROJECT_ROOT环境变量。还有配置可选或外部程序包。要使构建正常进行,每次执行构建时都需要设置所有这些外部变量。所有CMakeFile在配置阶段解决了这个问题。...image.png image.png 2.2 生成阶段 在生成阶段,cmake使用了一套语法解析系统,关键的类图如下。cmMakefile对象存错了CMakeLists.txt的所有输入变量。...image.png 2.3 依赖管理和更新构建 CMake在使用IDE的平台不生成依赖,这些依赖由IDE自己完成。...:查找dir路径下的所有源文件,保存到variable变量中.
领取专属 10元无门槛券
手把手带您无忧上云