admin
2025-04-27 9280d221d473730e81738628d1b247131f500a64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#声明最小版本
cmake_minimum_required(VERSION 3.2)
#工程名称
project(AIRecognize LANGUAGES CXX CUDA)
# c++ 11
set(CMAKE_CXX_FLAGS "-std=c++14 -I/usr/include/mysql -Wall") 
 
set(CMAKE_BUILD_TYPE Debug)
 
# CUDA
find_package(CUDA REQUIRED)
message(STATUS "Found CUDA headers: ${CUDA_INCLUDE_DIRS}")
message(STATUS "Found CUDA libraries: ${CUDA_LIBRARIES}")
 
# TensorRT
set(TENSORRT_ROOT /usr/local/TensorRT-8.6.1.6)
find_path(TENSORRT_INCLUDE_DIR NvInfer.h
        HINTS ${TENSORRT_ROOT} PATH_SUFFIXES include/)
message(STATUS "Found TensorRT headers: ${TENSORRT_INCLUDE_DIR}")
 
# TensorRT infer
find_library(TENSORRT_LIBRARY_INFER nvinfer
        HINTS ${TENSORRT_ROOT} ${TENSORRT_BUILD} ${CUDA_TOOLKIT_ROOT_DIR}
        PATH_SUFFIXES lib lib64 lib/x64)
message(STATUS "Found TensorRT-nvinfer libs: ${TENSORRT_LIBRARY_INFER}")
 
# TensorRT onnxparser
find_library(TENSORRT_LIBRARY_ONNXPARSER nvonnxparser
        HINTS  ${TENSORRT_ROOT} ${TENSORRT_BUILD} ${CUDA_TOOLKIT_ROOT_DIR}
        PATH_SUFFIXES lib lib64 lib/x64)
message(STATUS "Found TensorRT-onnxparser libs: ${TENSORRT_LIBRARY_ONNXPARSER}")
set(TENSORRT_LIBRARY ${TENSORRT_LIBRARY_INFER} ${TENSORRT_LIBRARY_ONNXPARSER})
 
# OpenCV
find_package(OpenCV REQUIRED)
 
# Boost
find_package(Boost REQUIRED COMPONENTS filesystem system)
 
# 查找FreeType库
find_package(Freetype REQUIRED)
message(STATUS "Found Freetype libraries: ${FREETYPE_LIBRARIES}")
 
# 查找 librabbitmq 库
find_package(PkgConfig REQUIRED)
pkg_check_modules(RABBITMQ REQUIRED librabbitmq)
 
# 手动查找 hiredis 头文件和库文件
find_path(HIREDIS_INCLUDE_DIR hiredis.h PATH_SUFFIXES hiredis)
find_library(HIREDIS_LIBRARY NAMES hiredis)
 
# 检查是否找到 hiredis
if (HIREDIS_INCLUDE_DIR AND HIREDIS_LIBRARY)
message(STATUS "Found HIREDIS headers: ${HIREDIS_INCLUDE_DIR}")
endif()
 
# 查找 jsoncpp 库
find_package(jsoncpp REQUIRED)
 
find_package(CURL REQUIRED)
 
# 添加opencv头文件
include_directories(${OpenCV_INCLUDE_DIRS})
# 添加freetype头文件
include_directories(${FREETYPE_INCLUDE_DIRS})
 
link_directories(/usr/local/lib)
 
# 递归收集rtsp目录及其子目录下的所有.cpp文件
file(GLOB_RECURSE base_srcs "${CMAKE_CURRENT_SOURCE_DIR}/base/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/base/*.h")
file(GLOB_RECURSE cls_srcs "${CMAKE_CURRENT_SOURCE_DIR}/cls/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/cls/*.h")
file(GLOB_RECURSE deploy_srcs "${CMAKE_CURRENT_SOURCE_DIR}/deploy/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/deploy/*.h")
#file(GLOB_RECURSE rtsp_srcs "${CMAKE_CURRENT_SOURCE_DIR}/rtsp/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/rtsp/*.h")
#file(GLOB_RECURSE rtsp_srcs "${CMAKE_CURRENT_SOURCE_DIR}/third_party/live555/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/third_party/live555/*.h")
#file(GLOB_RECURSE json_srcs "${CMAKE_CURRENT_SOURCE_DIR}/third_party/jsoncpp/**/*.cpp")
 
 
# 查找指定目录下的所有源文件,然后将结果存进指定变量名。
#aux_source_directory(. SRC_LIST)
aux_source_directory(${CMAKE_SOURCE_DIR} SRC_LIST)
 
# 生成可执行文件
#cuda_add_executable(AIRecognize ${SRC_LIST} ${base_srcs} ${cls_srcs} ${deploy_srcs} ${rtsp_srcs})
add_executable(AIRecognize ${SRC_LIST} ${base_srcs} ${cls_srcs} ${deploy_srcs} ${rtsp_srcs})
 
# 使用jsoncpp
#find_library(jsoncpp_lib libjsoncpp.a)
 
# 生成可执行文件后,为生成文件target添加库
target_include_directories(
        AIRecognize PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CUDA_INCLUDE_DIRS} 
    ${TENSORRT_INCLUDE_DIR} 
    ${OpenCV_INCLUDE_DIRS}     
    ${CMAKE_CURRENT_SOURCE_DIR}/include
    ${RABBITMQ_INCLUDE_DIRS}
    ${jsoncpp_INCLUDE_DIRS}
    ${CURL_INCLUDE_DIRS}
    ${HIREDIS_INCLUDE_DIR}
)
 
target_link_libraries(
        AIRecognize
    ${CUDA_LIBRARIES} 
    ${TENSORRT_LIBRARY} 
    ${OpenCV_LIBS}
    jsoncpp
    ${Boost_LIBRARIES}
    ${FREETYPE_LIBRARIES}
    -lmysqlclient
    ${RABBITMQ_LIBRARIES}
    ${jsoncpp_LIBRARIES}
    ${CURL_LIBRARIES}
    ${HIREDIS_LIBRARY}
    )