初始化项目

This commit is contained in:
BBIT-Kai
2026-05-26 11:46:24 +08:00
commit 51b4399f6a
67 changed files with 69337 additions and 0 deletions
+164
View File
@@ -0,0 +1,164 @@
# 最低CMake版本要求:3.21 以上才支持 RUNTIME_DEPENDENCIES install 功能(自动部署 vcpkg so
cmake_minimum_required(VERSION 3.21)
# =====================================================
# Toolchain (vcpkg)
# =====================================================
# 告诉CMake使用vcpkg作为依赖管理
# 所有 find_package(... CONFIG) 会优先搜索 vcpkg 提供的库
set(CMAKE_TOOLCHAIN_FILE
$ENV{HOME}/vcpkg/scripts/buildsystems/vcpkg.cmake
CACHE STRING "Vcpkg toolchain file")
# =====================================================
# Project定义
# =====================================================
project(sentinel-app LANGUAGES CXX)
# =====================================================
# 全局构建配置
# =====================================================
# 使用C++17标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 对生成的库启用位置无关代码(PIE / PIC)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# =====================================================
# 平台检测 执行命令获取目标机器架构
# =====================================================
execute_process(
COMMAND gcc -dumpmachine
OUTPUT_VARIABLE TARGET_DEVICE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# 如果是 aarch64 (Jetson / Tegra),定义宏 PLATFORM_TEGRA
if(TARGET_DEVICE MATCHES "aarch64")
add_compile_definitions(PLATFORM_TEGRA)
endif()
# =====================================================
# 依赖库
# =====================================================
# pkg-config 必须,用来查询系统库的编译/链接参数
find_package(PkgConfig REQUIRED)
# vcpkg 管理的库(现代CMake target
find_package(miniocpp CONFIG REQUIRED) # minio C++ SDK
find_package(yaml-cpp CONFIG REQUIRED) # yaml parser
# ========================
# 系统库 / NVIDIA stack
# ========================
pkg_check_modules(GST REQUIRED gstreamer-1.0) # gstreamer 头文件与库
pkg_check_modules(UUID REQUIRED uuid) # uuid 库
# =====================================================
# 主可执行文件
# =====================================================
add_executable(sentinel-app
src/app.cpp
src/service/vehicle_event_service.cpp
src/service/rtsp_grabber.cpp
src/utils/ds_yml_parse.cpp
src/utils/my_utils.cpp
)
# 编译选项
target_compile_options(sentinel-app
PRIVATE
-Wall # 打开所有警告
-Werror # 警告当作错误
-Wno-unused-function # 忽略未使用函数警告
)
# 包含目录
target_include_directories(sentinel-app
PRIVATE
src # 自己的源码目录
src/service
src/utils
${GST_INCLUDE_DIRS} # gstreamer include
/opt/nvidia/deepstream/deepstream/sources/includes # DeepStream SDK
/usr/local/cuda/include # CUDA
)
# 链接目录(仅针对非 target 方式库)
target_link_directories(sentinel-app
PRIVATE
/opt/nvidia/deepstream/deepstream/lib # DeepStream 库
/usr/local/cuda/lib64 # CUDA 库
)
# 链接库
target_link_libraries(sentinel-app
PRIVATE
# vcpkg target,现代CMake可追踪
miniocpp::miniocpp
yaml-cpp
# RabbitMQ
SimpleAmqpClient
rabbitmq
# 系统/DeepStream/GStreamer库
${GST_LIBRARIES}
gstrtspserver-1.0
nvds_batch_jpegenc
nvdsgst_meta
nvdsgst_helper
nvds_meta
nvds_yml_parser
# 系统/第三方库
uuid
cudart
avformat
avcodec
avutil
swscale
avdevice
avfilter
curl
m
z
pthread
)
# =====================================================
# RPATH 设置(运行时库搜索路径)
# =====================================================
# BUILD_RPATH:构建时运行可执行文件的搜索路径
# INSTALL_RPATH:安装后运行可执行文件的搜索路径
# $ORIGIN 表示可执行文件所在目录
set_target_properties(sentinel-app PROPERTIES
BUILD_RPATH "\$ORIGIN/lib" # 优先搜索 dist/lib
INSTALL_RPATH "\$ORIGIN/lib:/opt/nvidia/deepstream/deepstream/lib" # fallback DeepStream
)
# =====================================================
# 安装规则(部署阶段)
# =====================================================
# 安装可执行文件,并自动收集 vcpkg 的运行时 so
install(TARGETS sentinel-app
RUNTIME_DEPENDENCIES
PRE_EXCLUDE_REGEXES
"ld-linux" # 排除系统 loader
"libc.so" # 系统 libc
"libm.so" # 系统 math
"libpthread.so" # 系统线程库
"libdl.so" # 系统动态库
"libcuda" # CUDA 系统库
"libnvidia" # NVIDIA 驱动
"libnv" # NVIDIA 系统库
"libgst" # GStreamer 系统库
"libav" # ffmpeg 系统库
"libcrypto" # 系统加密库
"libssl"
POST_EXCLUDE_REGEXES
".*/opt/nvidia/.*" # 不拷贝 DeepStream 系统库
".*/usr/lib/.*" # 不拷贝系统库
RUNTIME DESTINATION . # 可执行文件放 dist/
LIBRARY DESTINATION lib # 对应 so 库安装到 dist/lib/
)