![](https://img-blog.csdnimg.cn/20210902115826691.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
cmake学习
文章平均质量分 88
构建仓库相关记录
jjjstephen
就读于天津大学,在做视觉检测相关研究。
技能:软件开发
正在开发技能:ML&DL Paper撰写
待开发技能:硬件开发、硬件设计
展开
-
CMake:探究编译和编译命令
需要为这个示例编译设置适当的编译器标志、包括目录和链接库。函数,以评估给定编译器是否可以将预定义的代码编译成可执行文件。如果编译成功,则任务循环特性可用,我们打印一条消息。,再检查所需的特性是否可用。为此,设置了一个临时目录,命令读取内容到一个变量中,试图编译和连接这个变量。对于下一步正确调用编译器是必需的。目标,它还将设置正确的编译器标志和包含目录。源文件,来探测编译器是否支持这样的特性。并向用户打印消息之前,取消变量的设置。编译成功或失败的状态,将保存到。最后,祝大家变得更强!标准的循环特性,以便在。原创 2023-11-03 08:58:38 · 467 阅读 · 0 评论 -
CMake:构建时为特定目标运行自定义命令
是 CMake 中用于添加自定义构建规则的命令,通常用于在编译项目时执行一些自定义操作,例如生成文件、运行脚本等。最后,祝大家变得更强!原创 2023-11-01 08:23:23 · 333 阅读 · 0 评论 -
CMake:构建时运行自定义命令add_custom_command
用于在构建期间执行一些非标准的操作,例如生成代码、转换文件格式、运行测试或其他自定义任务。这可以帮助您在 CMake 构建系统中添加额外的步骤,以满足项目的特定需求。中的一个命令,用于向构建系统添加自定义的构建规则或自定义命令。这些文件通常是构建过程的目标,可以是可执行文件、库文件、数据文件等。项目的构建目标取决于命令的结果,这些命令只能在构建系统生成完成后的构建执行。中的命令不一样,根本原因是由于操作系统的文件系统的不同造成的。: 指定主要的依赖项,通常是影响命令执行的文件。的简单使用,来探索它的功能。原创 2023-10-24 08:45:08 · 854 阅读 · 0 评论 -
CMake:测试的其他补充(重要)
然而,有些测试可能会花费更长的时间或者被卡住(例如,由于高文件I/O负载),可能需要设置超时来终止耗时过长的测试,它们延迟了整个测试,并阻塞了部署管道。这对于更复杂的测试非常有用,这些测试需要在测试运行前进行设置,以及在测试完成后执行清理操作(例如:创建示例数据库、设置连接、断开连接、清理测试数据库等等)。虽然,这种策略将总测试时间最小化,但是在特定特性的代码开发期间,或者在调试期间,我们可能不希望运行整个测试集。当然,随着技术的不断发展,根据不同业务的需求测试框测出不穷,我们没有办法一一列举。原创 2023-09-21 09:40:34 · 281 阅读 · 0 评论 -
CMake:利用Google Test库进行单元测试
然而,启用此选项可能会导致生成较大的二进制文件,并可能意外地暴露符号。因此,虽然它简化了符号的导出,但需要仔细考虑其影响,以及是否适用于自己的项目。框架不仅仅是一个头文件,也是一个库,包含两个需要构建和链接的文件。可以将它们与我们的代码项目放在一起,但是为了使代码项目更加轻量级,我们将选择在配置时,下载一个定义良好的。目前更加流行)写一个小的项目实践,尽可能多的将该框架下的功能加以熟悉。存储库中的特定标签或分支,指定希望获取的库的版本。会自动在库的代码中插入导出指令,确保它们可以被外部链接。原创 2023-09-02 08:00:00 · 396 阅读 · 1 评论 -
CMake:利用CTest进行单元测试
生成器表达式在测试时非常方便,因为不必显式地将可执行程序的位置和名称,可以硬编码到测试中。以一种可移植的方式实现这一点非常麻烦,因为可执行文件和可执行后缀(例如,可以返回零或非零的脚本,都可以做测试用例。为了简单起见,我们将不使用任何测试库来实现,但是我们将在后面的笔记中熟悉。提供了解决这个问题的方法。下面的代码片段与上面给出的代码片段相同,在执行实际的。的测试工具,本篇通过编写和测试能够对整数求和的代码,以窥探。定义了一个新的测试,并设置测试名称和运行命令。关心的是,通过命令的返回码测试用例是否通过。原创 2023-08-28 19:49:48 · 512 阅读 · 0 评论 -
CMake: 利用Catch2库进行单元测试
对于简单功能没问题,但是通常情况下,我们想要使用一个测试框架,它提供了相关基础设施来运行更复杂的测试,包括固定方式进行测试,与数值公差的比较,以及在测试失败时输出更好的错误报告。这个测试框架有个很好的特性,它可以通过单个头库包含在项目中进行测试,这使得编译和更新框架特别容易。关于最新版本的使用我们将在本系列最后开启一个具体的小型项目探索测试框架。是一个单头文件测试框架,所以不需要定义和构建额外的目标。相同的目录中,我们可以选择一个不同的位置,并使用。选项,测试成功时,也会有输出。最后祝大家变得更强!原创 2023-08-31 18:00:00 · 260 阅读 · 0 评论 -
CMake:检测外部库---自定义find模块
目前上一篇,我们了解了CMake其中一种自定义检测外部库的方式,本篇将展示通过编写一个find模块来定位系统上的ZeroMQ库,以能够在非操作系统上检测该库。原创 2023-08-25 18:00:00 · 254 阅读 · 1 评论 -
CMake:检测外部库---使用pkg-config
前面几篇内容的学习,我们基本上了解了如何链接一个三方库的方法。本篇以及下一篇将补充两个检测外部库的方法。如果某个依赖项既不提供查找模块,也不提供供应商打包的。的信息将会被存储在一个导入目标中,其名称是。,可以将这个目标链接到可执行文件或库。的简单使用,来演示第一种方法的使用。文件的库或程序来查找和导入。通搜索任何附带包配置。原创 2023-08-16 18:00:00 · 721 阅读 · 0 评论 -
CMake: 检测并使用OpenMP的并行环境
OpenMP(Open Multi-Processing)是一个用于共享内存多处理器计算机体系结构的并行编程模型。它提供了一套用于并行化应用程序的指令集和编程接口,使得开发者能够更容易地在多核处理器上实现并行计算。以下是关于OpenMPOpenMP旨在简化并行程序的编写过程,它基于共享内存架构,其中多个处理器核心共享同一内存。每个核心都可以访问所有内存位置,因此通过共享数据来实现并行计算。OpenMP使用一种通过在现有代码中插入特殊的指令注释来实现并行性的方法。原创 2023-08-11 18:00:00 · 1882 阅读 · 0 评论 -
CMake:检测python模块和包
的目标(通常是一个可执行文件或库)指定了源文件。命令,用于定义自定义的构建步骤,以及生成相应的输出文件。视为目标的源文件之一,并确保在构建过程中该文件已经生成。这可以确保在构建过程中,始终使用最新的。发生变化,就执行指定的命令来将该文件复制到构建目录。的位置,以便后续的构建过程可以使用它。最后:希望大家都勇于向邪恶势力作斗争!库的版本号,以便后续的构建过程可以使用。这段代码的作用是在构建过程中,如果。来抑制进程生成的任何错误,并且使用。模块或包的项目中,确定满足对这些。通常,代码是依赖于特定的。原创 2023-08-09 18:00:00 · 454 阅读 · 0 评论 -
CMake:检测python解释器和python库
解释器及其开发组件匹配为完全相同的版本可能非常困难,对于那些将它们安装在非标准位置或系统上安装了多个版本的情况尤其如此。除了在系统上实际查找包模块之外,查找模块还会设置了一些有用的变量,反映实际找到了什么,也可以在自己的。编写的工具,从而将主程序和库打包在一起,或者在配置或构建过程中使用。无法找到模块包时,可以阅读相应检测模块的文档,以了解如何正确地使用。最后:用积极的态度面对生活,正面面对生活中的任何人、事!模块,并在使用它们之前详细阅读它们的文档。,以便找到及定位相应的版本的组件。,查找特定版本的包。原创 2023-08-05 16:54:24 · 4073 阅读 · 0 评论 -
CMake:为Eigen库使能向量化
因此,在分发或共享可执行文件时,最好使用更加通用的编译选项,除非确实需要充分利用特定处理器架构的优化。它会自动根据当前系统的处理器类型来决定使用最高级别的指令集,以充分利用处理器的性能和功能。也可能会导致生成的可执行文件在其他不同架构的计算机上运行不正确或不稳定,因此在分发或共享可执行文件时需谨慎使用。是一个编译器标志,用于告诉编译器根据当前主机的处理器架构来优化生成的机器码。编译器的编译选项,用于指示编译器使用主机处理器支持的最高级别的指令集来优化生成的机器码。的处理器上,它将能够获得更高的性能。原创 2023-08-01 18:00:00 · 440 阅读 · 0 评论 -
CMake:检测环境
为了使得我们的源代码能够跨平台、操作系统和编译器,根据平台不同的方式配置和/或构建代码是在构建项目过程中必不可少的环节。在实际的开发过程中,我们需要操作系统相关的CMake代码,会根据操作系统启用条件编译,或者在可用或必要时使用特定于编译器的扩展。检测到的主机系统信息,可用于设置相应的编译器标志,或实现可选的源代码编译,或根据主机系统生成源代码。当然,编写新代码时应该避免这种依赖,但在处理遗留代码或交叉编译时,这种依赖是有用的。,完全不使用预处理器,代价是为每种情况设置不同的源文件,然后使用。原创 2023-07-30 18:00:00 · 402 阅读 · 0 评论 -
CMake:使用控制流
将属性设置为给定文件的传递值。与目标非常相似,文件在CMake中也有属性,允许对构建系统进行非常细粒度的控制。本项目结构回归到了简单的结构,目的主要是为了快速展示本篇的主旨,即如何使用控制流实现一些功能。结合使用,以便尽早从循环中跳出。而本篇也是为第一章的完结篇,算是正式的踏入了。检索给定文件所需属性的值,并将其存储在。通过指定一个范围,可以对整数进行循环。最后:不要让坏情绪影响你的一天!在前面的示例中,我们已经使用过。原创 2023-07-25 18:00:00 · 126 阅读 · 0 评论 -
CMake:设置语言标准(三)
本篇为目前c++特性的最后一篇,我们从cmake语法的教程中插入了三篇c++语言特性的介绍,主要是为了对c++近些年来的变化有一个更加全面的了解。优点创建模块引用模块import 头文件import隐式地将 iostream 转换为模块加速构建, 因为 iostream 只会处理一次和预编译头 (PCH) 具有相似的效果Ranges 代表一串元素, 或者一串元素中的一段,类似于 对。好处协程定义是一个函数,具备如下关键字之一:应用场景使用Lambda 表达式的更新[=, this原创 2023-07-20 09:42:23 · 377 阅读 · 0 评论 -
CMake:设置语言标准(二)
标记,修饰类、变、函数等,当程序中使用到了被其修饰的代码时,编译时被产生警告,用户提示开发者该标记修饰的内容将来可能会被丢弃,尽量不要使用。指示符,使用它们来给编译器提供一些额外的信息,来产生一些优化或特定的代码,也可以给其它开发者一些提示信息。来实现读写锁,保证多个线程可以同时读,但是写线程必须独立运行,写操作不可以同时和读操作一起进行。,大字符串的拷贝赋值操作会触发堆内存分配,很影响运行效率,有了。情况下,函数的作用域超过了对象的作用域,对象已经被。,但是这就涉及到了内存管理,也许你会使用。原创 2023-07-18 21:06:04 · 512 阅读 · 0 评论 -
CMake:设置语言标准(一)
在C++ 11标准之前,C++标准委员会还在 2003 年对C++ 98标准做了一次修改(称为C++ 03标准),但由于仅仅修复了一些C++ 98标准中存在的漏洞,并未修改核心语法,因此人们习惯将这次修订和C++ 98合称为C++98/03标准。以上 3 个标准中,C++ 11标准无疑是颠覆性的,该标准在C++ 98的基础上修正了约600个C++语言中存在的缺陷,同时添加了约140个新特性,这些更新使得C++语言焕然一新C++可以使用typedef。原创 2023-07-18 20:26:24 · 499 阅读 · 0 评论 -
CMake: 设置编译选项
尽管检查这些变量的方式非常流行,但我们认为更健壮的替代方法是检查所需的标志集是否与给定的编译器一起工作,这样项目中实际上只使用有效的标志。我们学习了构建类型的相关内容,并且可以生成了不同构建类型的库,这一篇我们将介绍编译器选项的相关内容。是指在编译程序时,可以通过设置不同的选项来控制编译器的行为和生成的代码的特性。不同的编译器可能支持不同的选项,具体的选项和使用方法可以参考编译器的文档或者官方网站。此外,一些标志可能会被弃用,或者在编译器的较晚版本中引入。标志确定设置为给定编译器有效的标志,因此将包含在。原创 2023-05-19 21:59:21 · 2024 阅读 · 0 评论 -
CMake:构建类型(Debug、Release以及其他)
我们前几篇的学习基本上可以完整构建项目和库了,接下来我们将基于第三篇的内容进行修改和补充,不断的完善各种学到的内容。原创 2023-05-16 08:00:00 · 5710 阅读 · 0 评论 -
CMake:条件语句、选项命令以及指定编译器
上两篇,我们基本上对静态库和动态库的基本概念以及如何构建有了全面的认识。有了以上的实践,我们可以通过对自己在工作和科研学习中常用的一些工具进行总结和归纳,慢慢的形成成自己的库。如我们不同领域的数学库,数据库操作工具库等等。原创 2023-04-22 21:56:16 · 2661 阅读 · 0 评论 -
CMake:静态库和动态的补充
上一篇,我们分别学习了利用CMake去构建多文件多目录的项目,然后分别讲述了静态库和动态库的相关知识,最后学习在不同平台(Windows、Linux)上利用CMake去构建项目。具体可参考上一篇。今天,我们将对CMake在不同平台上构建动态库和静态库做进一步的探索,即如何利用一个比较统一的模板在不同的平台构建静态库和动态库,以及对add_library命令的其他参数做进一步的探索。原创 2023-04-16 17:34:12 · 1328 阅读 · 0 评论 -
CMake:构建、链接静态库和动态库
首先,如果对程序的生命周期的不清楚,请先移步这里进行学习。原创 2023-04-09 22:35:12 · 8459 阅读 · 0 评论 -
CMake:单个源文件编译为可执行文件
前段时间,我们开启过一段短暂的cmake学习之旅,其主要是以翻译《PROFESSIONAL CMAKE: A PRACTICAL GUID》一书为主,并对其中部分内容加以改善。但是该书的内容比较生涩难懂,且其与C++相结合的例子却少之又少,所以停止了更新。本次cmake学习之旅将结合《CMake Cookbook》一书以及在本人在具体项目工程需求的具体实践,将Modern CMake所有性能以代码和笔记的形式呈现!本系列笔记之旅,首先假设你已对linux操作系统有了简单的了解,并对命令行有基本的了解原创 2023-04-08 09:22:48 · 895 阅读 · 0 评论 -
CMake(十三):编译器和链接器的要点
cmake系统学习原创 2022-01-19 20:00:00 · 3398 阅读 · 0 评论 -
CMake(十二):构建类型
本章和下一章涉及两个密切相关的主题。构建类型(在某些IDE工具中也称为构建配置或构建方案)是一种高级控件,它选择不同的编译器和链接器行为集。构建类型的操作是本章的主题,而下一章将介绍控制编译器和链接器选项的更具体细节。总之,这些章节涵盖了除了最琐碎的项目外,每个CMake开发人员通常都会使用的材料。12.1 构建基础类型 构建类型有可能以某种方式影响与构建相关的几乎所有内容。虽然它主要对编译器和链接器的行为有直接影响,但它也对项目使用的目录结构有影响。这反过来又会影响开发人员如何设置他们自己的本地开原创 2022-01-19 20:00:00 · 8011 阅读 · 3 评论 -
CMake(十一):策略
cmake系统学习原创 2022-01-18 20:00:00 · 1014 阅读 · 0 评论 -
CMake(十):模块
cmake系统学习原创 2022-01-17 20:00:00 · 1347 阅读 · 0 评论 -
CMake(九):生成器表达式
cmake系统学习原创 2022-01-16 20:00:00 · 3120 阅读 · 3 评论 -
CMake(七):函数和宏
cmake系统学习原创 2022-01-12 21:09:50 · 1508 阅读 · 0 评论 -
CMake(六):使用子目录
cmake系统学习原创 2022-01-13 20:00:00 · 7944 阅读 · 0 评论 -
CMake(五):控制流
对于大多数CMake项目来说,一个常见的需求是只在特定的情况下应用一些步骤。例如,项目可能只希望在特定的编译器或针对特定平台构建时使用特定的编译器标志。在其他情况下,项目可能需要迭代一组值,或者不断重复某些步骤,直到满足某个条件。CMake很好地支持了这些流控制示例,大多数软件开发人员应该都很熟悉这些方法。普遍存在的if()命令提供了预期的if-then-else行为,循环是通过foreach()和while()命令提供的。这三个命令提供了大多数编程语言实现的传统行为,但它们也添加了特定于CMake的特性。原创 2022-01-11 17:22:56 · 684 阅读 · 0 评论 -
CMake(四):变量
cmake系统学习原创 2022-01-10 17:24:14 · 3507 阅读 · 1 评论 -
CMake(三):构建简单的目标
如前一章所示,在CMake中定义一个简单的可执行文件是相对简单的。前面给出的简单示例需要为可执行文件定义一个目标名称,并列出要编译的源文件:add_executable(myApp main.cpp)这假设开发者想要构建一个基本的控制台可执行文件,但是CMake也允许开发者定义其他类型的可执行文件,比如苹果平台上的应用程序包和Windows GUI应用程序。接下来讨论add_executable()可以指定的附加选项来指定这些细节。除了可执行文件外,开发人员还经常需要构建和链接库。CMake支原创 2022-01-09 14:57:30 · 1195 阅读 · 0 评论 -
CMake(二):一个最小的项目
所有的CMake项目都以一个名为CMakeLists.txt的文件开始,它被放置在源代码树的顶部。可以把它想象成CMake项目文件,它定义了所有关于构建的内容,从源代码和目标,到测试、打包和其他定制任务。它可以简单到只有几行代码,也可以非常复杂,从其他目录中插入更多的文件。CMakeLists.txt只是一个普通的文本文件,通常是直接编辑的,就像项目中的其他源文件一样。继续与源代码的类比,CMake定义了自己的语言,它有许多程序员熟悉的东西,如变量、函数、宏、条件逻辑、循环、代码注释等等。下面是一个简单原创 2022-01-08 11:48:34 · 1140 阅读 · 0 评论 -
CMake(一):系统学习CMake之初识CMake
系统学习CMake(一)原创 2022-01-07 14:29:57 · 3092 阅读 · 0 评论 -
cmakelists关于连接三方库提示错误:LNK:无法打开的“../.obj”
0.简介在搭建仓库时,之前一直cmake使用的是相对路径,在写相对路径时,十分繁琐,所以之后开始重新编写相关的cmake,全部将三方库的链接路径更改为绝对路径。但是会出现如下错误1.错误原因分析cmake编写错误:在相关的.cmake中实现如下cmake_minimum_required(VERSION 3.0)set(OPENCV_DIR ${CMAKE_SOURCE_DIR}/third_party/opencv/lib/opencv_world420d)导致错误的原因是:当原创 2021-09-02 11:59:59 · 601 阅读 · 0 评论