备份最新边缘设备程序
This commit is contained in:
@@ -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/
|
||||
)
|
||||
Reference in New Issue
Block a user