引用与安装(CPP)
在开发 C++ 工程时,您可以通过两种方式引用 AimRT:
[推荐] 基于 CMake FetchContent,通过源码进行引用;
安装后,基于 CMake find_package 进行引用;
AimRT 比较轻量,推荐用户直接基于源码进行引用。如果要使用基于安装的方式进行引用,AimRT 也提供了两种方式:
从源码编译安装;
二进制安装;
编译环境要求
AimRT 兼容 linux、windows 等主流操作系统,编译器需要能够支持 c++20,CMake 版本需要 3.24 或以上。我们已经在以下操作系统和编译器上测试过:
Ubuntu22.04
gcc-11.4
gcc-12.4
gcc-13.3
clang-15.0.7
clang-16.0.6
clang-17.0.6
clang-18.1.8
Windows11
MSVC-19.40
请注意:
在编译构建时,AimRT 可能通过源码方式引用一些第三方依赖,如果出现网络问题,可以参考CMake文档进行处理。
在打开某些选项、编译某些插件时,AimRT 可能需要额外引用一些第三方依赖,细节请参考对应插件的文档、CMake 代码文件或构建时的提示。以下是一些示例:
如果要编译 ROS2 相关接口/插件,AimRT 会通过
find_package
的方式在本地寻找 rclcpp 等依赖,请确保本地安装有ROS2 Humble。如果要构建 Python 接口、cli 工具等,AimRT 会通过
find_package
的方式在本地寻找 Python 依赖,请确保本地安装有 Python3。
通过源码引用
您可以参考以下 CMake 代码引用 AimRT:
include(FetchContent)
# 可以指定aimrt地址和版本
FetchContent_Declare(
aimrt
GIT_REPOSITORY https://github.com/AimRT/aimrt.git
GIT_TAG v1.x.x)
FetchContent_GetProperties(aimrt)
if(NOT aimrt_POPULATED)
# 设置AimRT的一些编译选项
set(AIMRT_BUILD_TESTS OFF CACHE BOOL "")
set(AIMRT_BUILD_EXAMPLES OFF CACHE BOOL "")
FetchContent_MakeAvailable(aimrt)
endif()
# 引入后直接使用target_link_libraries链接aimrt的target
target_link_libraries(
my_module
PUBLIC aimrt::interface::aimrt_module_cpp_interface)
安装后find_package引用
请注意:使用 install 后 find_package 引用这种方式,只能引用部分功能,只能基于 pkg 模式开发,无法使用 app 模式开发、或开发 aimrt 插件。
安装方式一:从源码构建安装
基于源码编译 AimRT 非常简单,可参考以下步骤:
首先请确认本地环境符合要求;
通过 git 等方式下载源码;
直接执行 AimRT 源码根路径下的 build 脚本执行编译、安装;
linux 下请执行 build.sh;
windows 下请执行 build.bat;
可以修改 build 脚本中的 CMake 选项以开关一些功能;
可以修改 build 脚本中的
CMAKE_INSTALL_PREFIX
选项指定安装地址;如果遇到网络问题无法下载一些依赖,请参考AimRT中的CMake文档中的说明;
安装方式二:从二进制包安装
TODO
安装完成后,使用CMake find_package进行引用
完成安装后,参考以下步骤完成引用:
如果没有安装在系统路径,则需要在自己项目的 CMake 中设置 CMAKE_PREFIX_PATH 到 AimRT 的安装目录,例如:
list(APPEND CMAKE_PREFIX_PATH "/path/to/aimrt/install")
需要在自己项目的 CMake 中找到必须的依赖,可以直接使用 AimRT 安装后附带的 .cmake 脚本,参考以下代码:
list(APPEND CMAKE_MODULE_PATH /path/to/aimrt/install/cmake) include(GetFmt) include(GetLibUnifex) include(GetProtobuf) include(GetYamlCpp) include(GetJsonCpp)
如果编译 AimRT 时带上了 ROS 相关功能,还需要引用 AimRT 安装时引入的一些 ROS 包,例如:
find_package(ros2_plugin_proto REQUIRED)
最后,通过find_package来找到aimrt:
find_package(aimrt REQUIRED)
完整的示例 CMake 代码:
list(APPEND CMAKE_PREFIX_PATH "/path/to/aimrt/install")
list(APPEND CMAKE_MODULE_PATH "/path/to/aimrt/install/cmake")
include(GetFmt)
include(GetLibUnifex)
include(GetProtobuf)
include(GetYamlCpp)
include(GetJsonCpp)
find_package(ros2_plugin_proto REQUIRED)
find_package(aimrt REQUIRED)
# 引入后直接使用target_link_libraries链接aimrt的target
target_link_libraries(
my_module
PUBLIC aimrt::interface::aimrt_module_cpp_interface)