1
1
# 设置项目
2
- cmake_minimum_required (VERSION 3.15.0) # 设置CMake的最低版本要求
3
- cmake_policy (SET CMP0091 NEW) # 允许在CMake 3.10+中自动设置项目名作为二进制目录名
4
- cmake_policy (SET CMP0146 OLD) # 忽略对find_package的过时警告
5
- project (TensorRT-YOLO VERSION 5.1.1 LANGUAGES CXX CUDA) # 定义项目名称、版本和使用的编程语言(C++和CUDA)
2
+ cmake_minimum_required (VERSION 3.12)
3
+ cmake_policy (SET CMP0091 NEW)
4
+ project (TensorRT-YOLO VERSION 6.0.0 LANGUAGES CXX CUDA)
6
5
7
6
# 设置 C++ 标准
8
- set (CMAKE_CXX_STANDARD 17) # 设置C++标准为17
9
- set (CMAKE_CXX_STANDARD_REQUIRED ON ) # 要求C++标准必须满足17
7
+ set (CMAKE_CXX_STANDARD 17)
8
+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
10
9
11
- # 添加编译规则
12
- set (CMAKE_EXPORT_COMPILE_COMMANDS ON ) # 生成编译数据库,便于代码分析工具使用
10
+ # 生成编译数据库,便于代码分析工具使用
11
+ set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
13
12
14
13
# 添加依赖项
15
- ## CUDA
16
- find_package (CUDA REQUIRED) # 查找CUDA包
17
- set (CMAKE_CUDA_ARCHITECTURES native) # 自动检测最佳CUDA架构
18
- set (CUDA_PATH ${CUDA_TOOLKIT_ROOT_DIR} ) # 缓存CUDA路径
19
-
20
- ## Pybind11
21
- set (PYBIND11_FINDPYTHON ON ) # 开启寻找Python
22
- find_package (Python COMPONENTS Interpreter Development REQUIRED) # 查找Python解释器和开发组件
23
- find_package (pybind11 CONFIG REQUIRED) # 查找pybind11包
14
+ if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.18)
15
+ find_package (CUDAToolkit REQUIRED)
16
+ set (CUDA_INCLUDE_DIRS ${CUDAToolkit_INCLUDE_DIRS} )
17
+ set (CUDA_LIBRARIES ${CUDAToolkit_LIBRARIES} )
18
+ else ()
19
+ find_package (CUDA REQUIRED)
20
+ endif ()
21
+ set (CMAKE_CUDA_ARCHITECTURES 89;86;75;70;61) # CUDA 架构版本 8.9, 8.6, 7.5, 7.0, 6.1
24
22
25
23
# 添加编译选项
26
- option (TENSORRT_PATH "TensorRT Path. Example: /usr/local/tensorrt" "" ) # 添加编译选项,用于指定TensorRT路径
27
- # 检查 TensorRT 路径是否已设置
24
+ option (TENSORRT_PATH "TensorRT Path. Example: /usr/local/tensorrt" "" )
28
25
if (NOT TENSORRT_PATH)
29
- message (FATAL_ERROR "TensorRT path is not set. Please specify the TensorRT path." ) # 如果未设置,则报错
26
+ message (FATAL_ERROR "TensorRT path is not set. Please specify the TensorRT path." )
30
27
endif ()
31
28
32
- # 添加公共配置
29
+ # 添加选项:是否编译Python版本
30
+ option (BUILD_PYTHON "Build Python bindings" OFF )
31
+ if (BUILD_PYTHON)
32
+ message (STATUS "Python bindings will be built." )
33
+
34
+ # Pybind11 依赖
35
+ set (PYBIND11_FINDPYTHON ON )
36
+ find_package (Python COMPONENTS Interpreter Development REQUIRED)
37
+ find_package (pybind11 CONFIG REQUIRED)
38
+ else ()
39
+ message (STATUS "Python bindings will NOT be built." )
40
+ endif ()
41
+
42
+ # 配置CUDA和TensorRT的函数
33
43
function (configure_cuda_trt target )
34
- # 添加CUDA定义、包含目录、链接库
35
44
target_compile_definitions (${target} PRIVATE ${CUDA_DEFINITIONS} )
36
45
target_include_directories (${target} PRIVATE ${CUDA_INCLUDE_DIRS} )
37
46
target_link_libraries (${target} PRIVATE ${CUDA_cudart_LIBRARY} )
38
47
39
- # 添加TensorRT的包含目录、库目录、链接库
40
48
target_include_directories (${target} PRIVATE ${TENSORRT_PATH} /include )
41
49
target_link_directories (${target} PRIVATE ${TENSORRT_PATH} /lib)
42
50
if (MSVC AND EXISTS ${TENSORRT_PATH} /lib/nvinfer_10.dll)
@@ -46,66 +54,76 @@ function(configure_cuda_trt target)
46
54
endif ()
47
55
endfunction ()
48
56
57
+ # 添加源文件的函数
49
58
function (add_compile_files target )
50
- # 添加头文件搜索路径
51
- include_directories (${PROJECT_SOURCE_DIR} /include )
59
+ include_directories (${PROJECT_SOURCE_DIR} )
52
60
file (GLOB_RECURSE SOURCES
53
- ${PROJECT_SOURCE_DIR} /source /deploy/core/*.cpp
54
- ${PROJECT_SOURCE_DIR} /source /deploy/utils/*.cpp
55
- ${PROJECT_SOURCE_DIR} /source /deploy/vision/*.cpp
56
- ${PROJECT_SOURCE_DIR} /source /deploy/vision/*.cu
61
+ ${PROJECT_SOURCE_DIR} /deploy/core/*.cpp
62
+ ${PROJECT_SOURCE_DIR} /deploy/utils/*.cpp
63
+ ${PROJECT_SOURCE_DIR} /deploy/infer/*.cpp
64
+ ${PROJECT_SOURCE_DIR} /deploy/infer/*.cu
65
+ ${PROJECT_SOURCE_DIR} /deploy/model.cpp
57
66
)
58
- # 添加源文件
59
- target_sources (${target} PRIVATE ${SOURCES} )
67
+ target_sources (${target} PRIVATE ${SOURCES} )
60
68
endfunction ()
61
69
70
+ # 设置编译选项的函数
62
71
function (set_compile_options target )
63
-
64
72
if (MSVC )
65
- target_compile_options (${target} PRIVATE $<$<CONFIG:Release>:-O2>) # 对于MSVC,在Release模式下使用-O2优化
66
- set_property (TARGET ${target} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" ) # 设置MSVC运行时库
73
+ target_compile_options (${target} PRIVATE $<$<CONFIG:Release>:-O2>)
74
+ set_property (TARGET ${target} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" )
67
75
else ()
68
- target_compile_options (${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-O3 -flto=auto>) # 对于非MSVC,使用-O3优化和自动LTO
69
- target_link_options (${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-O3 -flto=auto>) # 链接时同样使用-O3优化和自动LTO
76
+ target_compile_options (${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-O3 -flto=auto>)
77
+ target_link_options (${target} PRIVATE $<$<COMPILE_LANGUAGE:CXX>:-O3 -flto=auto>)
70
78
endif ()
71
-
72
79
endfunction ()
73
80
74
81
# 添加子目录
75
- add_subdirectory (${PROJECT_SOURCE_DIR} /plugin) # 添加插件目录
82
+ add_subdirectory (${PROJECT_SOURCE_DIR} /plugin)
76
83
77
84
# 定义目标 deploy
78
- add_library (deploy SHARED) # 创建共享库
79
- add_compile_files(deploy) # 添加源文件
80
- configure_cuda_trt(deploy) # 配置CUDA和TensorRT
81
- set_compile_options(deploy) # 设置编译选项
82
- set_target_properties (deploy PROPERTIES OUTPUT_NAME deploy) # 设置输出名称
83
- if (MSVC )
84
- set_target_properties (deploy PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR} /lib) # 设置Release模式下输出目录
85
- set_target_properties (deploy PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR} /lib)
86
- set_target_properties (deploy PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR} /lib) # 设置Debug模式下输出目录
87
- set_target_properties (deploy PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR} /lib)
88
- else ()
89
- set_target_properties (deploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR} /lib) # 设置库文件输出目录
90
- endif ()
85
+ add_library (deploy SHARED)
86
+ add_compile_files(deploy)
87
+ configure_cuda_trt(deploy)
88
+ set_compile_options(deploy)
89
+ set_target_properties (deploy PROPERTIES OUTPUT_NAME deploy)
91
90
92
- # 定义目标 pydeploy
93
- pybind11_add_module(pydeploy ${PROJECT_SOURCE_DIR} /source /deploy/pybind/deploy.cpp) # 创建pybind11模块
94
- add_compile_files(pydeploy) # 添加源文件
95
- configure_cuda_trt(pydeploy) # 配置CUDA和TensorRT
96
- set_compile_options(pydeploy) # 设置编译选项
97
- set_target_properties (pydeploy PROPERTIES OUTPUT_NAME pydeploy) # 设置输出名称
98
91
if (MSVC )
99
- set_target_properties (pydeploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR} /tensorrt_yolo/libs) # 设置Release模式下输出目录
100
- set_target_properties (pydeploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR} /tensorrt_yolo/libs) # 设置Debug模式下输出目录
92
+ set_target_properties (deploy PROPERTIES
93
+ RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR} /lib
94
+ ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR} /lib
95
+ RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR} /lib
96
+ ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR} /lib
97
+ )
101
98
else ()
102
- set_target_properties (pydeploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR} /tensorrt_yolo/libs) # 设置库文件输出目录
99
+ set_target_properties (deploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR} /lib)
103
100
endif ()
104
- set_target_properties (pydeploy PROPERTIES
105
- COMPILE_DEFINITIONS "CUDA_PATH=\" ${CUDA_TOOLKIT_ROOT_DIR} \" "
106
- COMPILE_DEFINITIONS "TENSORRT_PATH=\" ${TENSORRT_PATH} \" "
107
- ) # 设置编译定义
108
- configure_file (
109
- ${CMAKE_SOURCE_DIR} /tensorrt_yolo/c_lib_wrap.py.in
110
- ${CMAKE_SOURCE_DIR} /tensorrt_yolo/c_lib_wrap.py
111
- ) # 配置文件
101
+
102
+ # 定义目标 pydeploy(仅在BUILD_PYTHON为ON时编译)
103
+ if (BUILD_PYTHON)
104
+ pybind11_add_module(pydeploy ${PROJECT_SOURCE_DIR} /deploy/pybind.cpp)
105
+ add_compile_files(pydeploy)
106
+ configure_cuda_trt(pydeploy)
107
+ set_compile_options(pydeploy)
108
+ set_target_properties (pydeploy PROPERTIES OUTPUT_NAME pydeploy)
109
+
110
+ if (MSVC )
111
+ set_target_properties (pydeploy PROPERTIES
112
+ LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_SOURCE_DIR} /python/tensorrt_yolo/libs
113
+ LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_SOURCE_DIR} /python/tensorrt_yolo/libs
114
+ )
115
+ else ()
116
+ set_target_properties (pydeploy PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR} /python/tensorrt_yolo/libs)
117
+ endif ()
118
+
119
+ set_target_properties (pydeploy PROPERTIES
120
+ COMPILE_DEFINITIONS "CUDA_PATH=\" ${CUDA_TOOLKIT_ROOT_DIR} \" "
121
+ COMPILE_DEFINITIONS "TENSORRT_PATH=\" ${TENSORRT_PATH} \" "
122
+ )
123
+
124
+ # 配置文件
125
+ configure_file (
126
+ ${CMAKE_SOURCE_DIR} /python/tensorrt_yolo/c_lib_wrap.py.in
127
+ ${CMAKE_SOURCE_DIR} /python/tensorrt_yolo/c_lib_wrap.py
128
+ )
129
+ endif ()
0 commit comments