cmake
文章平均质量分 72
FL1768317420
这个作者很懒,什么都没留下…
展开
-
[cmake]cmake详细教程
你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。CMake 就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。否则使用我们定义的 power 函数。原创 2024-04-02 14:03:22 · 701 阅读 · 0 评论 -
[cmake]让cmake管理测试
gtest_add_tests命令中的指的就是使用gtest框架编写用例编译出来的可执行文件,可以多次使用gtest_add_tests命令添加不同的测试可执行文件,另外要使能测试功能,需要再顶层的CMakeLists.txt文件末尾增加。CMake可以支持gtest测试用例,具体方法可以参考。原创 2024-03-31 07:30:37 · 185 阅读 · 0 评论 -
[cmake]cmake安装自己的库
这里假设:我们的安装目录是/home/install/,我们把libmylib.a安装到/home/install/lib下,把mylib.h安装到/home/install/include下,把main可执行文件安装到/home/install/bin下。前面我们创建了自己的库,也构建了一个可执行文件对库进行测试,本小节将介绍如何把库文件、头文件、可执行文件分别安装到指定的目录,这里要用到CMake的install命令,相关介绍可以参考。之后,可以发现三个文件已经分别安装到指定的目录。原创 2024-03-31 07:30:01 · 389 阅读 · 0 评论 -
[cmake]cmake构建自己的库
本小节将讲述如果构建自己的库,在开始之前先对目录做一些调整。原先的目录没有划分,三方库、本工程的源文件、构建过程文件和构建结果都在一个文件夹下,看起来比较凌乱,因此在开始构建自己的库之前,先来重构一下文件夹。原创 2024-03-31 07:29:25 · 329 阅读 · 0 评论 -
[yolox]ubuntu上部署yolox的ncnn模型
首先转换pytorch->onnx->param模型,这个过程可以查资料步骤有点多,参考blog.51cto.com/u_15660370/6408303,这里重点讲解转换后部署。注意这个CMakeLists.txt和yolox.cpp一起,yolox.cpp代码就在yolox官方源码demo/ncnn/cpp里面,然后编译。opencv3.4.4(编译过程省略,参考我其他博客)解压后,编写CMakeLists.txt。方式一(测试用的这个方法)转载 2024-03-30 07:06:49 · 42 阅读 · 0 评论 -
[cmake]cmake引入三方库gtest
很多时候,我们需要在工程中引入第三方库,例如加解密、证书、tls等功能的openssl库。本文以C++开源测试框架库gtest为例介绍如何将该库引入到我们的工程中,并写一个简单的用例来验证。有两种方式将其引入到我们的工程中,一种是将gtest的源码直接与本地工程一起编译构建,一种是将gtest编译成链接库,本地工程引用该库。在介绍上述两种方式之前,需要先下载gtest的源码,下载方式。原创 2024-03-30 06:49:59 · 570 阅读 · 0 评论 -
[cmake]cmake一个最小的Cmake脚本
一个最小的Cmake脚本,只需要包含文件,并在该文件中使用PROJECT命令(命令简介可以参考)指定该构建工程的名称即可。我们新建一个目录example(后续示例扩展将一直使用该目录),并在该目录下新建文件至此,一个最小的Cmake构建脚本已经完成,虽然它目前什么也做不了,但是我们仍然可以运行cmake构建命令,在example目录下运行命令(后续无特殊说明,命令运行目录默认位于examplecmake .运行后,会生成一系列的为后续构建准备的文件,包括生成编译所需要的Makefile。原创 2024-03-30 06:49:10 · 271 阅读 · 0 评论 -
[cmake]cmake获取源文件属性命令get_source_file_property简介
可以使用get_source_file_property命令获取指定源文件的属性,源文件属性默认是从当前目录属性中获取。原创 2024-03-30 06:48:20 · 969 阅读 · 0 评论 -
[cmake]cmake获取目标属性命令get_target_property简介
可以使用get_target_property获取指定目标的属性。原创 2024-03-30 06:47:47 · 473 阅读 · 0 评论 -
[cmake]cmake获取目录属性命令get_directory_property简介
可以通过get_directory_property来获取指定目录的属性。原创 2024-03-30 06:47:16 · 310 阅读 · 0 评论 -
[cmake]cmake获取全局GLOBAL属性命令get_cmake_property简介
可以通过get_cmake_property命令来获取CMake的全局范围属性。原创 2024-03-29 06:56:13 · 316 阅读 · 0 评论 -
[cmake]cmake命令之target_link_directories简介
为特定的构建目标添加链接目录,具体的命令格式为:必须是已经通过add_executable()或add_library()等命令创建出来的目标,对于每一个添加的目录,也有可选的范围参数PUBLIC、PRIVATE和INTERFACE,区别是:指定PUBLIC或PRIVATE时,目录会添加到目标的LINK_DIRECTORIES属性中;指定PUBLIC或INTERFACE时,目录会添加到目标的INTERFACE_LINK_DIRECTORIES属性中。原创 2024-03-29 06:55:32 · 656 阅读 · 0 评论 -
[cmake]cmake命令之target_include_directories简介
与上面的对比,只修改了两个CMakeLists.txt文件,去除了target_include_directories/test/CMakeLists.txt中的target_include_directories语句,在target_include_directories/CMakeLists.txt中通过target_include_directories将test目录增加到目标文件main中。target_include_directories则针对指定的目标文件生效。原创 2024-03-29 06:55:01 · 1169 阅读 · 0 评论 -
[cmake]cmake中的变量
变量是CMake中的基本的存储单元,一般来说变量的类型是string,也可以根据需求解析成其他类型(例如整形等),通常是用set()来创建/设置一个变量,用unset()释放一个变量。变量名称是大小写敏感,CMake建议只用大小写字母、-和_对变量进行命名。原创 2024-03-29 06:54:22 · 848 阅读 · 0 评论 -
[cmake]cmake之function命令介绍
function()命令用于创建一个函数,一旦创建,后续可以当做独立的命令使用。原创 2024-03-29 06:53:42 · 564 阅读 · 0 评论 -
[cmake]cmake命令之block介绍
Block范围(Block Scope)是指创建一个以block()开始到endblock()结束所的范围,在这个范围内,对变量(或/和策略)的访问需要满足一定规则。block()和endblock()之间的命令列表不会立马执行。注意:block命令需要CMake 3.25及以上版本才支持。原创 2024-03-28 07:02:47 · 694 阅读 · 0 评论 -
[cmake]cmake编译命令target_compile_options简介
该命令添加编译选项到编译目标中,与add_compile_options不同的是,target_compile_options针对构建的目标添加编译选项,而add_compile_options是针对源文件添加预编译选项(实际上也隐含对当前构建目标添加编译选项)。总体来说,target_compile_options与add_compile_options的关系,和add_compile_definitions与target_compile_definitions的关系类似。test.h文件内容。原创 2024-03-28 07:02:13 · 1396 阅读 · 0 评论 -
[cmake]cmake编译命令add_compile_options简介
下面写一个简单的示例,将会定义一个不使用的变量not_use_var,通过添加一个 -Wunused-variable编译选项,在编译时对未使用变量进行告警提示。为源文件增加编译选项,添加的编译选项也会添加到目录的。原创 2024-03-28 07:01:41 · 251 阅读 · 0 评论 -
[cmake]cmake编译命令target_compile_definitions简介
在编译main可执行文件时候,使用了-DDEBUG_PRINT -DINTERFACE_TEST_DEF -DPUBLIC_PRINT ,说明test库的PUBLIC和INTERFACE预编译选项传递给了main。1、对于CMakeLists.txt,通过构建一个test库和一个可执行文件main,对test库添加3个编译选项:一个是范围为PRIVATE的PRIVATE_PRINT,一个是范围为PUBLIC的PUBLIC_PRINT,一个范围是INTERFACE的INTERFACE_TEST_DEF;原创 2024-03-27 06:40:43 · 1830 阅读 · 0 评论 -
[cmake]cmake编译命令add_compile_definitions简介
属性(当前CMakeLists文件所在的目录和包含的构建目标都会添加)中。预处理定义的格式为VAR或VAR=value,CMake负责将指定的定义转换成本地构建系统可识别的值。对于C/C++编译器来说,就是会将此函数添加的预定义命令最终编译的时候使用-D参数添加到编译命令行中。CMakeLists.txt文件内容:添加了预处理标志DEBUG_MODE,并将COMPILE_DEFINITIONS属性也打印出来。下面来简单的测试一下,新建两个文件,CMakeLists.txt和main.cpp。原创 2024-03-27 06:40:13 · 571 阅读 · 0 评论 -
[cmake]cmake编译目录包含命令include_directories简介
2、include_directories添加的目录,会传递到当前所在CMakeLists.txt文件中通过add_subdirectory增加的下层CMakeLists.txt中(add_subdirectory语句之后调用的include_directories添加的目录无法传递)。3、下层CMakeLists.txt文件中调用的include_directories添加的目录,不会传递到调用它的上层CMakeLists.txt文件。该命令主要是将目录添加到编译器的头文件的搜索目录之下,具体介绍见。原创 2024-03-27 06:39:41 · 1640 阅读 · 0 评论 -
[cmake]cmake的生成器Generator
主要分两类,一类是命令行构建工具的生成器,一类是IDE构建工具的生成器。原创 2024-03-27 06:39:01 · 1055 阅读 · 0 评论 -
[cmake]cmake编译工具链
默认情况下,Cmake会根据所使用的编程语言,决定使用何种工具链来编译、链接、创建可执行文件。但是在交叉编译场景,那么最好通过工具链文件来指定编译、链接等信息。本文介绍Cmake工具链文件的相关内容。交叉编译:主机系统(host)和目标系统(target)不一样,也就是Cmake运行的环境(主机系统)和最终构建出来的可执行文件要运行的环境(目标系统)不是同一个环境。例如在Linux服务器上上通过Cmake构建出需要在ARM嵌入式设备上运行可执行文件。原创 2024-03-27 06:38:27 · 683 阅读 · 0 评论 -
[cmake]cmake命令之install
intall()命令为工程生成安装规则,同一个源文件目录下的安装规则按照intall()命令的调用顺序在安装时(也就是使用时)执行。intall()命令有多个形式,其中有一些是针对文件和目标对象定义安装选项。指定文件将要安装的目录,可以是相对路径也可以是绝对路径。如果是相对路径,会以变量(Unix/Linux下默认值是/usr/localWindows下的默认值是)内容为前缀。类Unix系统下可以在安装时通过DESTDIR环境变量(参考DESTDIRDESTDIR是的缩写)重定位整个安装路径。原创 2024-03-26 07:26:06 · 1839 阅读 · 0 评论 -
[cmake]cmake命令之file
file是文件操作命令,用于文件或路径的操作,结果也会在文件系统上进行存储。因此,与cmake_path命令只是语义概念上对路径的处理不同,file会与文件系统进行实际的交互。命令包含读写文件系统路径转换传输锁归档写文件。原创 2024-03-26 07:25:23 · 1342 阅读 · 0 评论 -
[cmake]cmake命令之find_file
find_file命令按照全路径查找指定的文件,并将查找的结果存储在中,如果指定了NO_CACHE选项,那么是一个普通变量,否则是一个缓存条目(会存储在文件中)。如果找到了指定的文件,那么结果存入中,除非被清空,否则后续继续调用find_file也不会再继续查找;如果没有找到文件,那么的值为。原创 2024-03-26 07:24:41 · 911 阅读 · 0 评论 -
[cmake]cmake命令之cmake_policy
通过CMP形式来唯一定义一个策略,例如CMake的3.23版本,定义的策略有130个,从CMP0000到CMP0129。原创 2024-03-26 07:23:59 · 1201 阅读 · 0 评论 -
[cmake]cmake命令之cmake_path
该命令用来操作路径,仅仅是语义概念上的处理,并不会在文件系统上执行任何交互。路径可以不存在,甚至是当前系统不允许的路径。如果想要了解与文件系统交互的命令,参考file()。cmake_path会将路径以CMake所运行的构建系统(例如,主机平台)的格式处理,而不是目标系统。在交叉编译过程中,如果路径包含的元素在CMake运行的系统上无法表示(例如路径是C:\\,但是系统并不是Windows),那么结果不可预测。cmake_path分为以下几个子命令:分解、查询、修改、生成、转换、哈希。原创 2024-03-26 07:23:24 · 893 阅读 · 0 评论 -
[cmake]Cmake命令之execute_process
如其名字,该命令通过运行指定的命令来执行一个或多个子进程。可以指定多个命令,并且多个命令是通过管道方式执行,上一个命令的标准输出通过管道传递,作为下一个命令的标准输入。所有的命令都共享单个标准错误管道。执行单个命令,本例子以执行uname -o获取操作系统名称为例。# 输出操作系统名称GNU/Linux执行多个命令,前一个命令的输出会作为后一个命令的输入(相当于Unix/Linux中管道的概念),本例以ls -al,请注意,实际相当于在命令行中执行,即过滤出带匹配cmake。原创 2024-03-25 08:27:10 · 1470 阅读 · 0 评论 -
[cmake]CMake获取属性命令get_property简介
命令格式为:命令的第一个参数是存储属性获取的结果,第二个参数表示待获取的属性归属的范围,第三个参数是PROPERTY选项后面跟着属性的名称(可以是CMake默认定义的属性,也可以自定义属性)。原创 2024-03-25 08:26:23 · 959 阅读 · 0 评论 -
[camke]CMake实践构建一个“Hello world!“
程序,内容是输出"Hello world!),它可以将指定的源文件生成目标可执行文件,在。要构建出可执行文件,需要使用到。命令(命令的介绍可以参考。表明已经生成可执行文件。原创 2024-03-25 08:25:47 · 432 阅读 · 0 评论 -
[cmake]CMake添加链接目录命令link_directories简介
为编译器添加库搜索目录,命令的格式为:要注意的是:该命令调用后,只有这个命令调用之后创建的目标(库、可执行文件等)才会起作用。也就是说已经调用add_executable()或add_library()创建目标后,再调用link_directories()是没有效果的。该命令会将路径添加到当前CMakeLists.txt文件的目录LINK_DIRECTORIES属性中,原创 2024-03-25 08:24:48 · 1506 阅读 · 0 评论 -
[cmake]CMake 生成静态库与动态库
我们上面例子中使用了绝对路径INCLUDE_DIRECTORIES(/usr/include/hello)来指明include路径的位置,我们还可以使用另外一种方式,使用环境变量export CMAKE_INCLUDE_PATH=/usr/include/hello。上面的例子使用的是外部动态库,如果想要使用外部静态库,步骤也是相同的,只需要将上面例子中.so换成.a即可,不过使用外部静态库不需要头文件。这条指令可以用来设置输出的名称,对于动态库,还可以用来指定动态库版本和 API 版本。原创 2024-03-25 08:23:21 · 1546 阅读 · 0 评论 -
[cmake]include_directories和target_include_directories命令
默认情况下,include_directories命令会将目录添加到列表最后,可以通过命令设置CMAKE_INCLUDE_DIRECTORIES_BEFORE变量为ON来改变它默认行为,将目录添加到列表前面。如果使用SYSTEM选项,会把指定目录当成系统的搜索目录。该命令可以指定目标(exe或者so文件)需要包含的头文件路径,命名为 < target > 的命令必须是由 add _ Executive ()或 add _ library ()之类的命令创建的,并且不能是 ALIAS 目标。原创 2024-03-19 07:46:31 · 778 阅读 · 0 评论 -
[cmake]解决find_library查找位置不对的问题
是 CMake 提供的一个功能,用于在项目构建过程中查找并链接外部库文件。这个命令会在指定的路径中搜索库文件,比如.a或.so文件,在 Unix-like 系统中主要是这两种格式。其中是查找到的库文件路径存储的变量,name1是库文件的名称,path1path2等则是搜索的路径。原创 2024-03-18 07:33:10 · 1544 阅读 · 0 评论 -
[cmake]cmake 添加 boost
cmake 会自动设置 BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR 和 BOOST_ROOT。如何boost 不是安装在默认位置,则需要添加路径, 类似path的做法。且必须放在FIND_PACKAGE 前面。原创 2024-03-10 08:47:14 · 158 阅读 · 0 评论 -
[ubuntu]cmake安装的3种方法
选择最新版本的源码包:cmake-xxxxxx.tar.gz。官网下载地址:Download | CMake。进入解压后的文件目录下,执行如下命令。需要安装gcc、g++、make。安装指令:sudo bash xxxxxx.sh。查看版本:cmake --version。将存储库添加到您的源列表并进行更新。下载指定版本的sh文件。4.检查是否安装成功。原创 2023-12-03 19:47:24 · 1258 阅读 · 2 评论