- 博客(49)
- 收藏
- 关注
原创 8-选择静态或共享库
此时,如果您构建了所有内容,您可能会注意到链接失败,因为我们正在将不依赖位置的静态库与具有位置依赖的库组合在一起。在本节中,我们将展示如何使用BUILD_SHARED_LIBS变量来控制add_library()的默认行为,并允许控制如何构建没有显式类型的库(STATIC、SHARED、MODULE或OBJECT)。要做到这一点,我们需要将BUILD_SHARED_LIBS添加到顶级的CMakeLists.txt中。接下来,我们需要为静态库和共享库指定输出目录。
2024-07-09 17:08:42 152
原创 7-打包安装程序
接下来,我们将一些CPack变量设置到存储此项目的许可证和版本信息的位置。CPACK_GENERATOR和CPACK_SOURCE_GENERATOR变量分别选择用于二进制和源代码安装的生成器。接下来假设我们想要将我们的项目分发给其他人,以便他们可以使用它。这与我们之前在安装和测试中所做的安装略有不同,在安装中我们安装了从源代码构建的二进制文件。在本例中,我们将构建支持二进制安装和包管理特性的安装包。最后,我们将包括CPack模块,它将使用这些变量和当前系统的一些其他属性来设置安装程序。
2024-07-09 16:55:57 247
原创 6-添加自定义命令和生成的文件
通过在 CMake 构建过程中,定义了一个名为Table.h的自定义生成规则。当构建过程需要这个文件时,会执行MakeTable程序来生成它。确保在执行生成命令之前,会先构建MakeTable。这种方法通常用于生成代码、复制文件或执行其他自定义构建任务,使得 CMake 的构建系统能够灵活地扩展和自定义。接下来我们要让CMake知道这个mysqrt.cxx依赖于生成的文件Table.h。这是通过将生成的Table.h添加到SqrtLibrary库的源列表中来实现的。mysqrt.cxx。
2024-07-09 16:33:36 513
原创 5-添加可用性检测
考虑在我们的项目中添加一些代码,这些代码依赖于目标平台可能没有的特性。对于本例,我们将添加一些代码,这些代码取决于目标平台是否具有log和exp函数。当然,几乎每个平台都有这些功能,但在本教程中,我们假设它们并不常见。
2024-07-09 15:24:56 379
原创 3-添加库的使用需求
目标参数的使用要求允许对库或可执行文件的链接和包含行进行更好的控制,同时也允许对CMake中目标的传递属性进行更多的控制。本节使用的示例代码见。
2024-07-09 14:00:12 270
原创 2-添加库
本节将学习如何在项目中创建和使用库,还将看到如何使库的使用成为可选的。 要在CMake中添加一个库,使用add_library()命令并指定哪些源文件应该组成该库。 我们可以使用一个或多个子目录组织项目,而不是将所有源文件放在一个目录中。在本例中,我们将专门为库创建一个子目录。在这里,我们可以添加一个新的CMakeLists.txt文件和一个或多个源文件。在顶级的CMakeLists.txt文件中,我们将使用add_subdirectory()命令将子目录添加到构建中。 创建库之后,使
2024-07-09 13:27:45 623
原创 1-简单开始cmake实践
教程所使用的实例代码见本文资源绑定的文件。最基本的CMake项目是从单个源代码文件构建的可执行文件。对于这样的简单项目,只需要一个包含三个命令的CMakeLists.txt文件。注意:虽然CMake支持大写,小写和混合大小写命令,但小写命令是首选,并将在整个教程中使用。任何项目的最重要的CMakeLists.txt必须从使用cmake_minimum_required()命令指定最小CMake版本开始。这将建立策略设置,并确保以下CMake函数与CMake的兼容版本一起运行。
2024-07-08 16:41:07 594
原创 7-google::protobuf::io命名空间下常用的C++ API----zero_copy_stream_impl.h
一、protobuf输入输出文件流C++ API总览。二、经常会用到的API。
2024-07-05 13:55:05 154
原创 4-google::protobuf命名空间下常用的C++ API----text_format.h
用于以人类可读的基于文本的格式打印和解析协议消息的工具类。
2024-07-05 13:33:06 231
原创 6-google::protobuf命名空间下常用的C++ API----repeated_field.h
这些类与STL的vector非常相似,但包含了许多优化,这些优化被发现特别适用于协议缓冲区的情况。RepeatedPtrField与STL vector特别不同,因为它管理它所包含的指针的所有权。通常,用户不需要直接访问RepeatedField对象,而应该使用protocol编译器自动生成的访问器函数。所生成的协议消息类使用RepeatedField和RepeatedPtrField来操作重复字段。
2024-07-05 11:27:13 272
原创 3-protocol buffer c++生成代码指南
当使用--cpp_out=命令行标志调用时,protocol buffer 编译器产生c++输出。--cpp_out=选项的参数是您希望编译器在其中编写c++输出的目录。编译器为每个.proto文件输入创建一个头文件和一个实现文件。输出文件的名称是通过获取.proto文件的名称并进行以下更改来计算的:扩展名(.proto)被.pb.h或.pb替换。分别为头文件或实现文件。proto路径(用--proto_path=或-I命令行标志指定)被输出路径(用--cpp_out=标志指定)替换。
2024-07-04 15:28:11 597
原创 2-Protocol Buffer 基础(c++)
要创建地址簿应用程序,需要从.proto文件开始。proto文件中的定义很简单:为要序列化的每个数据结构添加消息,然后为消息中的每个字段指定名称和类型。下面是定义消息的.proto文件addressbook.proto。proto文件以包声明开始,这有助于防止不同项目之间的命名冲突。在c++中,生成的类将放在与包名匹配的命名空间中。接下来,您有您的消息定义。消息只是包含一组类型化字段的聚合。
2024-07-03 17:31:03 567
原创 1-Protocol Buffers语言特性 (proto 3)
在前面的示例中,Result消息类型是在与SearchResponse相同的文件中定义的——如果您想要用作字段类型的消息类型已经在另一个.proto文件中定义了怎么办?您可以通过导入其他.proto文件来使用它们。
2024-07-03 15:48:41 784
原创 1-创建launch文件
launch文件简化了运行具有许多节点和特定配置细节的复杂系统。您可以使用Python、XML或YAML创建启动文件,并使用ros2启动命令运行它们。
2024-02-22 17:31:30 931
原创 五次多项式曲线插值
曲线插值是指基于特定的曲线类型(多项式曲线、贝塞尔曲线、B样条曲线等),根据自车期望达到的状态(比如自车到达某点的速度和加速度要为特定的数值),将此期望值作为边界条件带入曲线方程进行求解,获得曲线的系数,从而确定出满足要求的曲线。
2024-02-05 16:15:44 1402
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人