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

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

它被视为一个包定义,负责提供任何包函数和,检查要求,查找依赖项,并包含目标导出文件。...如果您决定向消耗项目暴露任何或函数,建议您将它们的定义放在一个单独的文件中,然后您可以从包的配置文件中include()它。...然而,对于不编译任何内容的包(仅头文件库、包等),您可以使用ARCH_INDEPENDENT关键词跳过此检查。 现在,是时候来一个实际例子。...作为包的作者,我们可以编写一个来扫描这个列表并检查我们是否提供所有必需的组件。但我们不需要这样做——这正是check_required_components()所做的。...文件末尾的将检查是否设置所有必需的变量。 如何在install()命令中使用组件 一些生成的工件可能不需要在所有场景中都进行安装。

32700

老外的嵌入式编程规范(值得一看)

定义结构和枚举   ii. 整数类型,更宽的无符号类型优先   iii....inside function, only data pointed to by d could be modified */ void my_func(void* const d) { } 当函数可以接受任何类型的指针时...使用动态内存分配代替标准C malloc和自由函数,或者如果库/项目提供定义内存分配,使用它的实现看看LwMEM,一个自定义内存管理库。...下面的例子展示一些不好的做法 if (a) do_b(); else do_c(); if (a) do_a(); else do_b(); 空while循环、do-while循环或for循环必须包含花括号...---- 总是使用而不是文字常量,特别是对于数字 所有的必须是全大写的,并带有下划线_字符(可选),除非它们被明确标记为function,将来可能会被常规函数语法替换 /* OK */ #define

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

doxygen教程_genedoc教程

综述  我们在编写代码的时候,最头疼的就属于说明书,很多代码一边写具体代码,一边写说明书,Doxygen主要解决说明书问题,可以在我们写代码的时候讲注释转化为说明书,Graphviz主要是用于图形展示...向下拉滑条,看见有JAVADOC_AUTOBRIEF和QT_AUTOBRIEF两个框,如果勾选,在这两种风格下默认第一行为简单说明,以第一个句号为分隔;如果不选,则需要按照Doxygen的指令@brief...并不处理所有的注释,doxygen重点关注与程序结构有关的注释,比如:文件、类、结构、函数、全局变量、等注释,而忽略函数内局部变量、代码等的注释。...4.Doxygen无法为DLL中定义的类导出文档。 常用指令 指令 说明 @file 档案的批注说明。...如果不希望doxygen强行执行唯一标签,可以使用\addtogroup而非\defgroup。运作方式和\defgroup很像,但是如果该group已经定义,它默认向已存在的注释中添加一个新的项。

4.4K30

值得一看:老外的嵌入式编程规范

定义结构和枚举   ii. 整数类型,更宽的无符号类型优先   iii....function, only data pointed to by d could be modified */ void my_func(void* const d) { } 当函数可以接受任何类型的指针时...使用动态内存分配代替标准C malloc和自由函数,或者如果库/项目提供定义内存分配,使用它的实现看看LwMEM,一个自定义内存管理库。...下面的例子展示一些不好的做法 if (a) do_b(); else do_c(); if (a) do_a(); else do_b(); 空while循环、do-while循环或for循环必须包含花括号...---- 总是使用而不是文字常量,特别是对于数字 所有的必须是全大写的,并带有下划线_字符(可选),除非它们被明确标记为function,将来可能会被常规函数语法替换 /* OK */ #define

1.1K40

这才是理想中的 C 语言编程规范

定义结构和枚举   ii. 整数类型,更宽的无符号类型优先   iii....inside function, only data pointed to by d could be modified */ void my_func(void* const d) { } 当函数可以接受任何类型的指针时...使用动态内存分配代替标准C malloc和自由函数,或者如果库/项目提供定义内存分配,使用它的实现看看LwMEM,一个自定义内存管理库。...下面的例子展示一些不好的做法 if (a) do_b(); else do_c(); if (a) do_a(); else do_b(); 空while循环、do-while循环或for循环必须包含花括号...总是使用而不是文字常量,特别是对于数字 所有的必须是全大写的,并带有下划线_字符(可选),除非它们被明确标记为function,将来可能会被常规函数语法替换 /* OK */ #define MY_MACRO

2.3K20

CMake 秘籍(七)

运行 Doxygen 将提取这些注释并在 Doxyfile 配置文件中定义的格式中创建文档。Doxygen 可以输出 HTML、XML,甚至是 LaTeX 或 PDF。...此外,请注意UseDoxygenDoc.cmake自定义模块仅执行以下操作: 执行对 Doxygen 和 Perl 可执行文件的搜索 定义一个函数 实际创建docs目标的操作留给稍后调用add_doxygen_doc...我们通过使用函数而不是来实现add_doxygen_doc,以限制变量定义的作用域和可能的副作用。...在这种情况下,函数和都可以工作(并且会产生相同的结果),但我们建议除非需要修改父作用域中的变量,否则应优先使用函数而不是。...实现便利函数doxygen_add_docs,它将作为我们在本食谱中介绍的

7700

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

第六章,使用 CMake 链接: 第六章为我们提供关于链接(在任何项目中都有用)的一般信息,其中大部分默认情况下就很有用。...然后我们提供一个AddTests,该将准备一个测试目标、启用覆盖和内存检查。让我们详细看看它是如何工作的。 准备覆盖模块 为多个目标添加覆盖是一个有点棘手的过程,因为它包括几个步骤。...它与第八章中介绍的测试框架略有不同,因为它考虑目标名称,并将其添加到输出路径以避免任何冲突。...本书的第二部分教导我们如何使用 CMake 进行构建:如何使用目标,自定义命令,构建类型和生成器表达式。我们深入探讨了编译的技术细节,以及预处理器和优化器的配置。我们讨论链接,并介绍不同的库类型。...EQUAL 评估 和 是否相等。 list() 命令 该命令提供列表的基本操作:阅读、搜索、修改和排序。

7700

文档代码同源

是的,这怕是程序员写/修改代码的第一大原因。 2.抓Bug。程序员实现需求的副产品:八阿哥(bug)。把它送走,是我们改代码的第二大驱动。...至于洁癖,团队没有定义团队的写法,那么冲突修改是必然的。 代码中所有的修改都可归为这三类,更进一步,大部分应该是前两类。开源世界有一个很好用的工具是Doxygen。...从而强调需求的定义作用,主动维护需求的前后一致。 如模块中编写时,说明实现哪些需求。 ? ? 这些都是超文本标签,点击后迅速转到需求定义处可查看。 ?...每日提交版本库后,由其他程序员或者部门经理检查代码及修改,检查的内容如下: 1.代码修改是否有效,符合组织内部的规定; 2.文档和代码是否对应。...任何代码,全局只有一份。对于svn的版本库、git的版本库,有不同的办法。(svn可以使用externals属性,保持全局唯一的库文件。

50240

静态逆向反汇编获取函数调用关系链

例如doxygen就是通过分析源码来获取函数调用关系链的,但是却存在一个缺点---需要依赖于源码,而且在跨模块的调用关系的获取上存在缺陷。...从C/C++语言的角度来看,这个函数可以是一个纯C函数或者类成员非虚函数(补充:对于,在编译时就已将其替换为其所代表的项,所以在逆向的角度而言,若要获取的调用关系还需要进一步的将替换者变为,这个....以函数作为参数/变量进行传递的两种情况如图3所示: 图4 对于函数指针,我们只需要判断push/mov指令传递的地址是否是一个函数实际地址,若判断为真,就将其标明为一个函数指针的调用情况。...在虚表指针所指向的函数指针数组中,保存虚函数GetNumber和SetNumber的首地址。对于开发者而言,虚表和虚函数指针都是隐藏的,在常规的开发过程中感觉不到她们的存在。...下面是二进制变更/调用链与doxygen的对比图: 图10 上述整体描述了如何逆向分析获取函数调用关系链的方方面面,若是有讲的有误的地方,请大家指点改进,或者对虚函数的处理有更好的方法,要不吝赐教哦。

5K00

Orbbec Gemini 相机SDK 适配笔记.2

id=2 就是这个 因为这个是一个开源的魔改版本(其实也不是魔改版本): https://github.com/OpenNI/OpenNI2 位置在此 有机会的话,做下差异性检查(对比以前的版本和奥比的差异...JDK 6.0 sudo apt-get install openjdk-6-jdk - FreeGLUT3 sudo apt-get install freeglut3-dev - Doxygen...sudo apt-get install doxygen - GraphViz sudo apt-get install graphviz 至于编译的时候就更加的简单~在OpenNI...- ARM_CXX= - ARM_STAGING= 先定义环境变量...继续读: 安装SDK的说法,在编写我们的RGBD应用的时候,在编写的时候都要像这样: 加上第二个这样的头文件 头文件位置在此 这个是我从OpenNI的头文件里面找到的其它头 这里的写的是支持的平台

1.2K30

20款优秀的免费代码编辑器

SlickEdit的功能特性: 借助列表成员(List Members)、函数/方法增强帮助和格式化的Javadoc/XMLdoc/Doxygen注释,显示符号的细节。...从版本控制系统签入和签出代码 Diff文件和目录 自动预览光标所在符号的定义,不用动手指。预览工具窗口显示定义和格式化的Javadoc/XMLdoc/Doxygen注释。...jEdit的功能特性: 用java编写,所以它可以运行在Mac OS X, OS/2, Unix, VMS 和Windows平台上 内建语言;可扩展的插件体系;目前已经有很多和插件....IntelliJ IDEA(Windows、Linux和Mac OS X)(免费) intellij idea 2016是目前公认的效率最高的java开发IDE,整合开发过程中实用的众多功能,几乎可以不用鼠标可以方便的完成你要做的任何事情...支持任何Web应用程序或HTML文件。你可以为绝对任何一个网站编辑样式表,无论在线还是离线。由于我们采用了创新的Override技术,你甚至可以将打开的样式表应用于任何网站,立即看到其变化!

5.3K30

避免这7个误区,才能让【】削铁如泥

运算符优先级问题 在大多数定义示例中,每次出现的参数名称都带有括号,并且另一对括号通常会包围整个定义,这是编写最好的方式。...自引用规则将这一过程缩短了一步,即(4 + foo),因此此定义可能会导致程序在引用foo的任何地方将foo的值加4。 阅读程序的人看到foo是变量,就难以记得它也是,真的会坑爹的。...参数扫描处理 参数在被替换为主体之前必须经过完全扩展,替换后,将再次扫描整个主体,包括替换的参数,以查找要扩展的。...如果参数包含任何调用,则它们将在第一次扫描时扩展,那么结果不包含任何调用,因此第二次扫描不会更改它。...如果按照给定的方式替换了参数,并且没有进行扫描,则剩余的单个扫描将找到相同的调用并产生相同的结果。 扫描处理在以下三种特殊情况下有大的作用。

1.2K20

C编程规范整理

如果一个inline函数会在多个源文件中被用到,那么必须把它定义在**.h头文件**中。 定义函数时,参数顺序为:输入参数在前,输出参数在后。...强烈建议你在任何可以使用的情况下都要使用const。 类型命名。类型命名每个单词以大写字母开头,不包含下划线:MyExcitingClass、MyExcitingEnumo。...所有类型命名——类、结构体、类型定义(typedef)、枚举——使用相同约定。 变量命名。...命名。其命名像枚举命名—样全部大写、使用下划线。 注意永远不要用自然语言翻译代码作为注释,要假设读你代码的人C/C++比你强。 TODO注释。...文件头、函数头、全局常量变量、类型定义的注释格式采用工具可识别的格式(如doxygen)。 ? 相对独立的程序块之间、变量说明之后必须加空行。

81620

September Nebula3 SDK 中的新东西

着手删除#ifndef/#define/#endif 这些防止重复include的, 因为几乎所有的编译器(VStudio, GCC, Codewarrior) 都支持#pragma once  把同的样...Win32 和Xbox360 代码移动到一个共同的Win360 命名空间来消除代码冗余 加入了一个新的Toolkit层, 它包含了一些导出工具和辅助类 加入和整理了一些 Doxygen(文档) 页面...Nebula3 SDK目录下的工程很有用) 新的"projectinfo.xml" 文件为一些有用的导出工具定义工程和平台特有的属性 把 export.zip 档案文件分割到一个独立的平台无关文件和几个特定平台的文件...这样的话可以输出图表) 加入 IO::ExcelXMLReader 流读取类, 允许读取XML模式的MS Excel电子表格文件 在Messaging::AsyncPort加入行为方式, 定义处理线程怎样去等待新的消息...这个不错^_^) 加入CoreAudio和 Audio 子系统(构造中): CoreAudio 是后台的, 运行在自己的线程里 Audio 是前台的"客户端", 运行在主线程里 (或者其它任何线程

50040

clang 源码导读(3): clang driver 参数解析

必须支持不同的参数对各种行为进行控制,所以,clang driver 启动后的第一个主要任务就是 参数解析 正式分享前,我们先按照惯例分享本文涉及的主要 类图 和 流程图,方便对 参数解析 的主要流程进行理解 Info[1] 是保存定义的各种...std::lower_bound 查找第一个前缀匹配的 Info 比如,-arch 会变成 arch 根据 Info 初始化 Option 持有参数信息 通过 Option::accept 方法校验参数是否正常...参数正常时直接返回 如果没有找到合适的参数,再判断参数是否以 / 开头,如果开始,会把参数当做源码文件进行处理 其它情况下,会当做参数当做 未知参数 进行下一步处理 ?...image 先转发到 Option::acceptInternal 方法进行参数校验 判断解析到的参数是否属于别名 如果别名,会进行特殊处理 Option::acceptInternal 方法会根据 Option.../doxygen/classllvm_1_1opt_1_1InputArgList.html [6] DriverOptTable: https://clang.llvm.org/doxygen/DriverOptions

1.9K40

IC验证培训——SystemVerilog通用程序库(下)

在编译的时候可以使用来取消这种机制,消除其(相当小的)性能损失,但牺牲调试期间对随机化稳定性的保证。...B、将用户定义的数据表示为DOM,或将DOM表示为用户定义数据 虽然DOM结构是非常灵活的,并且提供一种表示任何所需数据结构的一致方式,但是对于日常的使用来说太笨拙。...因此,对于每个用户定义类,生成的toDOM和fromDOM方法是完全独立的,并且不可能建立公共基础设施来以一致的方式为所有对象处理序列化。...implements关键字让新类执行了DOM和fromDOM方法,它由释放,因此不需要额外的用户代码: 最后,我们演示一个虚构的用户基础设施代码,可以序列化和反序列化任何对象,如果它的类的类型是svlib_serializable...API库的连续完整性检查 单元测试还为我们提供面向用户的API是否方便智能的判,因为我们不得不在实现之前使用该API编写测试代码。糟糕的设计因此会被迅速的凸显出来。

1.1K30

C++内联函数

一、内联函数概念 在c++中,预定义的概念是用内联函数来实现的,而内联函数本身也是一个真正的函数。 内联函数具有普通函数的所有行为。...唯一不同之处在于内联函数会在适当的地方像预定义 一样展开,所以不需要函数调用的开销。因此应该不使用,使用内联函数。 在普通函数(非成员函数)函数前面加上inline关键字使之成为内联函数。...这个写法没有任何效果,仅仅是声明函数 inline void func(int a); 应该用下面的写法  inline int func(int a){ return ++; } 注意: 编译器将会检查函数参数列表使用是否正确...这些事 处理器无法完成的。 内联函数的确占用空间,但是内联函数相对于普通函数的优势只是省去了函数调用时候的压 栈,跳转,返回的开销。我们可以理解为内联函数是以空间换时间。..., int b) { return a+b; } int main() { int a = 10; int b = 20; int c = myadd(a,b) *5; }  任何在类内部定义的函数自动成为内联函数

1.1K40

回顾 | Facebook开源产业级深度学习框架 Caffe2

Caffe2 提供教学和示例,演示用一台机器上的多颗 GPU 或多台机器的一颗或多颗 GPU 进行大规模学习。学习训练和部署 iOS,Android 和 Raspberry Pi 模型。...在模型库 Caffe2 Model Zoo 里面的训练模型,只需几行代码就能运行。...Caffe2 原理(Philosophy) Caffe2 的原理与 Caffe 相同,开发原则可以概括为以下5点: 表达(Expression):模型和优化被定义为纯文本模式(plaintext schema...Caffe2 的宣传口号 “一次编码,随时随地运行”,可见 Caffe2 想要凸显其灵活、便携性,当然,还有训练模型。...C++:http://caffe2.ai/doxygen-c/html/classes.html Python:http://caffe2.ai/doxygen-python/html/annotated.html

83370
领券