utils cmake module
在 ubuntu 系统中,使用
sudo apt install libflatbuffers-dev flatbuffers-compiler安装好相应的依赖之后,会发现在系统目录下:/usr/lib/x86_64-linux-gnu/cmake/flatbuffers/ ├── FlatbuffersConfig.cmake ├── FlatbuffersConfigVersion.cmake ├── FlatbuffersSharedTargets.cmake ├── FlatbuffersSharedTargets-none.cmake ├── FlatbuffersTargets.cmake ├── FlatbuffersTargets-none.cmake ├── FlatcTargets.cmake └── FlatcTargets-none.cmake并不存在上面这个这么好用的 cmake module,所以需要自己下载使用
How to use
一个简单的示例: https://github.com/HRXWEB/build_flatbuffer_example
目录结构如下:
examples/
├── cmake
│ └── BuildFlatBuffers.cmake
├── CMakeLists.txt
├── flatbuffers
│ ├── ArrowPrimitive.fbs
│ ├── ByteVector.fbs
│ ├── CameraCalibration.fbs
│ ├── CircleAnnotation.fbs
│ ├── Color.fbs
│ ├── CompressedImage.fbs
│ ├── CubePrimitive.fbs
│ ├── CylinderPrimitive.fbs
│ ├── Duration.fbs
│ ├── FrameTransform.fbs
│ ├── FrameTransforms.fbs
│ ├── GeoJSON.fbs
│ ├── Grid.fbs
│ ├── ImageAnnotations.fbs
│ ├── KeyValuePair.fbs
│ ├── LaserScan.fbs
│ ├── LinePrimitive.fbs
│ ├── LocationFix.fbs
│ ├── Log.fbs
│ ├── ModelPrimitive.fbs
│ ├── PackedElementField.fbs
│ ├── Point2.fbs
│ ├── Point3.fbs
│ ├── PointCloud.fbs
│ ├── PointsAnnotation.fbs
│ ├── Pose.fbs
│ ├── PoseInFrame.fbs
│ ├── PosesInFrame.fbs
│ ├── Quaternion.fbs
│ ├── RawImage.fbs
│ ├── SceneEntityDeletion.fbs
│ ├── SceneEntity.fbs
│ ├── SceneUpdate.fbs
│ ├── SpherePrimitive.fbs
│ ├── TextAnnotation.fbs
│ ├── TextPrimitive.fbs
│ ├── Time.fbs
│ ├── TriangleListPrimitive.fbs
│ ├── Vector2.fbs
│ └── Vector3.fbs
└── src
├── example_server_flatbuffers.cpp主要重点关注 CMakeLists.txt 的内容
CMakeLists.txt
cmake_minimum_required(VERSION 3.15)
project(Examples CXX)
set(CMAKE_CXX_STANDARD 17)
find_package(Flatbuffers REQUIRED)
include(cmake/BuildFlatBuffers.cmake)
FILE(GLOB flatbuffers_schemas "flatbuffers/*.fbs")
build_flatbuffers(
"${flatbuffers_schemas}" # flatbuffers_schemas
flatbuffers # schema_include_dirs
flatbuffers_generated_schemas # custom_target_name
"" # additional_dependencies
${CMAKE_BINARY_DIR}/autogenerated_flatbuffers # generated_includes_dir
${CMAKE_BINARY_DIR}/autogenerated_flatbuffers # binary_schemas_dir
"" # copy_text_schemas_dir
)
add_executable(example_server_flatbuffers src/example_server_flatbuffers.cpp)
add_dependencies(example_server_flatbuffers flatbuffers_generated_schemas)
target_link_libraries(example_server_flatbuffers flatbuffers::flatbuffers)重点就是 build_flatbuffers 的使用方法,传入的几个变量作用如下:
flatbuffers_schemas: schema 文件的所在处,使用通配符schema_include_dirs: 告诉flatc去哪里寻找包含 schema 的目录,类似头文件,因为 schema 可能引用了其他的基础的 schemacustom_target_name: 指定生成的 target 的命令additional_dependencies: 其他的依赖,暂时没有需要,不清楚其作用generated_includes_dir: 生成的头文件所在的目录binary_schemas_dir: 生成的二进制bfbs文件所在的目录copy_text_schemas_dir: 暂时没用到,不知道作用
example_server_flatbuffers这个 target 单纯只是为了触发生成flatbuffers_generated_schemas,如果没有add_dependencies(example_server_flatbuffers flatbuffers_generated_schemas),根据 CMake 的构建规则,如果用不上的话就不会构建,就没法触发 flatc 的代码自动生成。