自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(164)
  • 资源 (1)
  • 收藏
  • 关注

原创 CMake:探究编译和编译命令

需要为这个示例编译设置适当的编译器标志、包括目录和链接库。函数,以评估给定编译器是否可以将预定义的代码编译成可执行文件。如果编译成功,则任务循环特性可用,我们打印一条消息。,再检查所需的特性是否可用。为此,设置了一个临时目录,命令读取内容到一个变量中,试图编译和连接这个变量。对于下一步正确调用编译器是必需的。目标,它还将设置正确的编译器标志和包含目录。源文件,来探测编译器是否支持这样的特性。并向用户打印消息之前,取消变量的设置。编译成功或失败的状态,将保存到。最后,祝大家变得更强!标准的循环特性,以便在。

2023-11-03 08:58:38 518

原创 CMake:构建时为特定目标运行自定义命令

是 CMake 中用于添加自定义构建规则的命令,通常用于在编译项目时执行一些自定义操作,例如生成文件、运行脚本等。最后,祝大家变得更强!

2023-11-01 08:23:23 383

原创 CMake:构建时运行自定义命令add_custom_command

用于在构建期间执行一些非标准的操作,例如生成代码、转换文件格式、运行测试或其他自定义任务。这可以帮助您在 CMake 构建系统中添加额外的步骤,以满足项目的特定需求。中的一个命令,用于向构建系统添加自定义的构建规则或自定义命令。这些文件通常是构建过程的目标,可以是可执行文件、库文件、数据文件等。项目的构建目标取决于命令的结果,这些命令只能在构建系统生成完成后的构建执行。中的命令不一样,根本原因是由于操作系统的文件系统的不同造成的。: 指定主要的依赖项,通常是影响命令执行的文件。的简单使用,来探索它的功能。

2023-10-24 08:45:08 986

原创 CMake:配置时运行自定义命令

已经好久好久没有更新这个系列了,但是无论如何这个系列一定会以较全面的形式更新完成,只是在时间上可能比较拖沓。没有更新的原因也是最近一个月在做一个项目,没日没夜的度过了一个多月的加班加点的生活。本篇,我们将学习使用execute_process命令在配置时运行定制化命令。本篇,只打印了结果,但实际项目中,可以警告、中止配置,或者设置可以查询的变量,来切换某些配置选项。进程中派生一个或多个子进程,从而提供了在配置项目时运行任意命令的方法。,每个命令的输出将通过管道传输到下一个命令中。命令将从当前正在执行的。

2023-10-19 09:20:38 249

原创 CMake:测试的其他补充(重要)

然而,有些测试可能会花费更长的时间或者被卡住(例如,由于高文件I/O负载),可能需要设置超时来终止耗时过长的测试,它们延迟了整个测试,并阻塞了部署管道。这对于更复杂的测试非常有用,这些测试需要在测试运行前进行设置,以及在测试完成后执行清理操作(例如:创建示例数据库、设置连接、断开连接、清理测试数据库等等)。虽然,这种策略将总测试时间最小化,但是在特定特性的代码开发期间,或者在调试期间,我们可能不希望运行整个测试集。当然,随着技术的不断发展,根据不同业务的需求测试框测出不穷,我们没有办法一一列举。

2023-09-21 09:40:34 304

原创 CMake:利用Google Test库进行单元测试

然而,启用此选项可能会导致生成较大的二进制文件,并可能意外地暴露符号。因此,虽然它简化了符号的导出,但需要仔细考虑其影响,以及是否适用于自己的项目。框架不仅仅是一个头文件,也是一个库,包含两个需要构建和链接的文件。可以将它们与我们的代码项目放在一起,但是为了使代码项目更加轻量级,我们将选择在配置时,下载一个定义良好的。目前更加流行)写一个小的项目实践,尽可能多的将该框架下的功能加以熟悉。存储库中的特定标签或分支,指定希望获取的库的版本。会自动在库的代码中插入导出指令,确保它们可以被外部链接。

2023-09-02 08:00:00 435 1

原创 CMake: 利用Catch2库进行单元测试

对于简单功能没问题,但是通常情况下,我们想要使用一个测试框架,它提供了相关基础设施来运行更复杂的测试,包括固定方式进行测试,与数值公差的比较,以及在测试失败时输出更好的错误报告。这个测试框架有个很好的特性,它可以通过单个头库包含在项目中进行测试,这使得编译和更新框架特别容易。关于最新版本的使用我们将在本系列最后开启一个具体的小型项目探索测试框架。是一个单头文件测试框架,所以不需要定义和构建额外的目标。相同的目录中,我们可以选择一个不同的位置,并使用。选项,测试成功时,也会有输出。最后祝大家变得更强!

2023-08-31 18:00:00 349

原创 CMake:利用CTest进行单元测试

生成器表达式在测试时非常方便,因为不必显式地将可执行程序的位置和名称,可以硬编码到测试中。以一种可移植的方式实现这一点非常麻烦,因为可执行文件和可执行后缀(例如,可以返回零或非零的脚本,都可以做测试用例。为了简单起见,我们将不使用任何测试库来实现,但是我们将在后面的笔记中熟悉。提供了解决这个问题的方法。下面的代码片段与上面给出的代码片段相同,在执行实际的。的测试工具,本篇通过编写和测试能够对整数求和的代码,以窥探。定义了一个新的测试,并设置测试名称和运行命令。关心的是,通过命令的返回码测试用例是否通过。

2023-08-28 19:49:48 623

原创 CMake:检测外部库---自定义find模块

目前上一篇,我们了解了CMake其中一种自定义检测外部库的方式,本篇将展示通过编写一个find模块来定位系统上的ZeroMQ库,以能够在非操作系统上检测该库。

2023-08-25 18:00:00 288 1

原创 CMake:检测外部库---使用pkg-config

前面几篇内容的学习,我们基本上了解了如何链接一个三方库的方法。本篇以及下一篇将补充两个检测外部库的方法。如果某个依赖项既不提供查找模块,也不提供供应商打包的。的信息将会被存储在一个导入目标中,其名称是。,可以将这个目标链接到可执行文件或库。的简单使用,来演示第一种方法的使用。文件的库或程序来查找和导入。通搜索任何附带包配置。

2023-08-16 18:00:00 801

原创 CMake: 检测并使用OpenMP的并行环境

OpenMP(Open Multi-Processing)是一个用于共享内存多处理器计算机体系结构的并行编程模型。它提供了一套用于并行化应用程序的指令集和编程接口,使得开发者能够更容易地在多核处理器上实现并行计算。以下是关于OpenMPOpenMP旨在简化并行程序的编写过程,它基于共享内存架构,其中多个处理器核心共享同一内存。每个核心都可以访问所有内存位置,因此通过共享数据来实现并行计算。OpenMP使用一种通过在现有代码中插入特殊的指令注释来实现并行性的方法。

2023-08-11 18:00:00 2186

原创 CMake:检测python模块和包

的目标(通常是一个可执行文件或库)指定了源文件。命令,用于定义自定义的构建步骤,以及生成相应的输出文件。视为目标的源文件之一,并确保在构建过程中该文件已经生成。这可以确保在构建过程中,始终使用最新的。发生变化,就执行指定的命令来将该文件复制到构建目录。的位置,以便后续的构建过程可以使用它。最后:希望大家都勇于向邪恶势力作斗争!库的版本号,以便后续的构建过程可以使用。这段代码的作用是在构建过程中,如果。来抑制进程生成的任何错误,并且使用。模块或包的项目中,确定满足对这些。通常,代码是依赖于特定的。

2023-08-09 18:00:00 481

原创 CMake:检测python解释器和python库

解释器及其开发组件匹配为完全相同的版本可能非常困难,对于那些将它们安装在非标准位置或系统上安装了多个版本的情况尤其如此。除了在系统上实际查找包模块之外,查找模块还会设置了一些有用的变量,反映实际找到了什么,也可以在自己的。编写的工具,从而将主程序和库打包在一起,或者在配置或构建过程中使用。无法找到模块包时,可以阅读相应检测模块的文档,以了解如何正确地使用。最后:用积极的态度面对生活,正面面对生活中的任何人、事!模块,并在使用它们之前详细阅读它们的文档。,以便找到及定位相应的版本的组件。,查找特定版本的包。

2023-08-05 16:54:24 4622

原创 CMake:为Eigen库使能向量化

因此,在分发或共享可执行文件时,最好使用更加通用的编译选项,除非确实需要充分利用特定处理器架构的优化。它会自动根据当前系统的处理器类型来决定使用最高级别的指令集,以充分利用处理器的性能和功能。也可能会导致生成的可执行文件在其他不同架构的计算机上运行不正确或不稳定,因此在分发或共享可执行文件时需谨慎使用。是一个编译器标志,用于告诉编译器根据当前主机的处理器架构来优化生成的机器码。编译器的编译选项,用于指示编译器使用主机处理器支持的最高级别的指令集来优化生成的机器码。的处理器上,它将能够获得更高的性能。

2023-08-01 18:00:00 529

原创 CMake:检测环境

为了使得我们的源代码能够跨平台、操作系统和编译器,根据平台不同的方式配置和/或构建代码是在构建项目过程中必不可少的环节。在实际的开发过程中,我们需要操作系统相关的CMake代码,会根据操作系统启用条件编译,或者在可用或必要时使用特定于编译器的扩展。检测到的主机系统信息,可用于设置相应的编译器标志,或实现可选的源代码编译,或根据主机系统生成源代码。当然,编写新代码时应该避免这种依赖,但在处理遗留代码或交叉编译时,这种依赖是有用的。,完全不使用预处理器,代价是为每种情况设置不同的源文件,然后使用。

2023-07-30 18:00:00 434

原创 CMake:使用控制流

将属性设置为给定文件的传递值。与目标非常相似,文件在CMake中也有属性,允许对构建系统进行非常细粒度的控制。本项目结构回归到了简单的结构,目的主要是为了快速展示本篇的主旨,即如何使用控制流实现一些功能。结合使用,以便尽早从循环中跳出。而本篇也是为第一章的完结篇,算是正式的踏入了。检索给定文件所需属性的值,并将其存储在。通过指定一个范围,可以对整数进行循环。最后:不要让坏情绪影响你的一天!在前面的示例中,我们已经使用过。

2023-07-25 18:00:00 138

原创 CMake:设置语言标准(三)

本篇为目前c++特性的最后一篇,我们从cmake语法的教程中插入了三篇c++语言特性的介绍,主要是为了对c++近些年来的变化有一个更加全面的了解。优点创建模块引用模块import 头文件import隐式地将 iostream 转换为模块加速构建, 因为 iostream 只会处理一次和预编译头 (PCH) 具有相似的效果Ranges 代表一串元素, 或者一串元素中的一段,类似于 对。好处协程定义是一个函数,具备如下关键字之一:应用场景使用Lambda 表达式的更新[=, this

2023-07-20 09:42:23 419

原创 CMake:设置语言标准(二)

标记,修饰类、变、函数等,当程序中使用到了被其修饰的代码时,编译时被产生警告,用户提示开发者该标记修饰的内容将来可能会被丢弃,尽量不要使用。指示符,使用它们来给编译器提供一些额外的信息,来产生一些优化或特定的代码,也可以给其它开发者一些提示信息。来实现读写锁,保证多个线程可以同时读,但是写线程必须独立运行,写操作不可以同时和读操作一起进行。,大字符串的拷贝赋值操作会触发堆内存分配,很影响运行效率,有了。情况下,函数的作用域超过了对象的作用域,对象已经被。,但是这就涉及到了内存管理,也许你会使用。

2023-07-18 21:06:04 523

原创 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 531

原创 CNNs:ZFNet之基于AlexNet特征可视化实验分析

针对AlexNet的实验现象,文章针对ImageNet数据集对AlexNet进行了微调,可以有效解决混乱网格和dead特征。首先,让我们先看一下ZFNet本节对网络细节不再展开叙述,其网络结构与AlexNet基本一致,仅仅修改了一些卷积参数,具体网络分析,请参考AlexNet网络介绍。这里我们使用对网络参数和结构进行打印。

2023-05-25 11:32:59 1162

原创 CMake: 设置编译选项

尽管检查这些变量的方式非常流行,但我们认为更健壮的替代方法是检查所需的标志集是否与给定的编译器一起工作,这样项目中实际上只使用有效的标志。我们学习了构建类型的相关内容,并且可以生成了不同构建类型的库,这一篇我们将介绍编译器选项的相关内容。是指在编译程序时,可以通过设置不同的选项来控制编译器的行为和生成的代码的特性。不同的编译器可能支持不同的选项,具体的选项和使用方法可以参考编译器的文档或者官方网站。此外,一些标志可能会被弃用,或者在编译器的较晚版本中引入。标志确定设置为给定编译器有效的标志,因此将包含在。

2023-05-19 21:59:21 2149

原创 CNNs: ZFNet之CNN的可视化网络介绍

import sys首先,我们做Deconv模块时,需要从convnet模块的最底层反向进行操作。其次,我们需要记录conv和deconv的相对关系以及unpooling和pooling之间的相对关系。接着,我们需要将conv模型的feature参数记录下来,并对其进行初始化。forward方法定义了模型的前向传播过程。给定输入x、层索引layer、激活索引和池化位置pool_locs,它根据指定的层开始进行反卷积操作,直到模型的最后一层。

2023-05-19 20:35:16 622 1

原创 CMake:构建类型(Debug、Release以及其他)

我们前几篇的学习基本上可以完整构建项目和库了,接下来我们将基于第三篇的内容进行修改和补充,不断的完善各种学到的内容。

2023-05-16 08:00:00 6181

原创 CNNs: AlexNet补充

至此,我们对AlexNet探究就结束了。当然,我们对AlexNet的探索仅仅是管中窥豹,下一篇CNNs系列的文章ZFNet将跟随文章对AlexNet做进一步的探索,以及对修改后的模型做进一步的探索!

2023-05-06 08:00:00 541

原创 CNNS:基于AlexNet的分类任务

上一篇,我们简单的介绍了AlexNet网络,这一篇我们将基于AlexNet对数据集pokeman进行分类实验。首先,我们对接下来用到的数据集pokeman和flowers进行简单的介绍。然后,我们通过实验去调整模型的超参数,去验证和探索模型的性能。

2023-04-28 18:00:00 207

原创 CNNs系列---AlexNet网络介绍

论文地址。

2023-04-23 18:00:00 149

原创 CMake:条件语句、选项命令以及指定编译器

上两篇,我们基本上对静态库和动态库的基本概念以及如何构建有了全面的认识。有了以上的实践,我们可以通过对自己在工作和科研学习中常用的一些工具进行总结和归纳,慢慢的形成成自己的库。如我们不同领域的数学库,数据库操作工具库等等。

2023-04-22 21:56:16 2855

原创 CMake:静态库和动态的补充

上一篇,我们分别学习了利用CMake去构建多文件多目录的项目,然后分别讲述了静态库和动态库的相关知识,最后学习在不同平台(Windows、Linux)上利用CMake去构建项目。具体可参考上一篇。今天,我们将对CMake在不同平台上构建动态库和静态库做进一步的探索,即如何利用一个比较统一的模板在不同的平台构建静态库和动态库,以及对add_library命令的其他参数做进一步的探索。

2023-04-16 17:34:12 1579

原创 CMake:构建、链接静态库和动态库

首先,如果对程序的生命周期的不清楚,请先移步这里进行学习。

2023-04-09 22:35:12 8872

原创 CMake:单个源文件编译为可执行文件

前段时间,我们开启过一段短暂的cmake学习之旅,其主要是以翻译《PROFESSIONAL CMAKE: A PRACTICAL GUID》一书为主,并对其中部分内容加以改善。但是该书的内容比较生涩难懂,且其与C++相结合的例子却少之又少,所以停止了更新。本次cmake学习之旅将结合《CMake Cookbook》一书以及在本人在具体项目工程需求的具体实践,将Modern CMake所有性能以代码和笔记的形式呈现!本系列笔记之旅,首先假设你已对linux操作系统有了简单的了解,并对命令行有基本的了解

2023-04-08 09:22:48 964

原创 CMake(十二):构建类型

本章和下一章涉及两个密切相关的主题。构建类型(在某些IDE工具中也称为构建配置或构建方案)是一种高级控件,它选择不同的编译器和链接器行为集。构建类型的操作是本章的主题,而下一章将介绍控制编译器和链接器选项的更具体细节。总之,这些章节涵盖了除了最琐碎的项目外,每个CMake开发人员通常都会使用的材料。12.1 构建基础类型​ 构建类型有可能以某种方式影响与构建相关的几乎所有内容。虽然它主要对编译器和链接器的行为有直接影响,但它也对项目使用的目录结构有影响。这反过来又会影响开发人员如何设置他们自己的本地开

2022-01-19 20:00:00 8227 3

原创 CMake(十三):编译器和链接器的要点

cmake系统学习

2022-01-19 20:00:00 3536

原创 CMake(十一):策略

cmake系统学习

2022-01-18 20:00:00 1047

原创 CMake(十):模块

cmake系统学习

2022-01-17 20:00:00 1403

原创 CMake(九):生成器表达式

cmake系统学习

2022-01-16 20:00:00 3350 3

原创 CMake(八):属性

cmake系统学习

2022-01-15 20:00:00 1489

原创 CMake(六):使用子目录

cmake系统学习

2022-01-13 20:00:00 8216

原创 CMake(七):函数和宏

cmake系统学习

2022-01-12 21:09:50 1535

原创 CMake(五):控制流

对于大多数CMake项目来说,一个常见的需求是只在特定的情况下应用一些步骤。例如,项目可能只希望在特定的编译器或针对特定平台构建时使用特定的编译器标志。在其他情况下,项目可能需要迭代一组值,或者不断重复某些步骤,直到满足某个条件。CMake很好地支持了这些流控制示例,大多数软件开发人员应该都很熟悉这些方法。普遍存在的if()命令提供了预期的if-then-else行为,循环是通过foreach()和while()命令提供的。这三个命令提供了大多数编程语言实现的传统行为,但它们也添加了特定于CMake的特性。

2022-01-11 17:22:56 715

原创 CMake(四):变量

cmake系统学习

2022-01-10 17:24:14 3569 1

1 冒泡排序算法.txt

在学习算法与结构时候学习到的一个简单的算法。此算法用于排列一组数据,从小到大。

2019-09-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除