11# 设置项目
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)
65
76# 设置 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 )
109
11- # 添加编译规则
12- set (CMAKE_EXPORT_COMPILE_COMMANDS ON ) # 生成编译数据库,便于代码分析工具使用
10+ # 生成编译数据库,便于代码分析工具使用
11+ set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
1312
1413# 添加依赖项
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
2422
2523# 添加编译选项
26- option (TENSORRT_PATH "TensorRT Path. Example: /usr/local/tensorrt" "" ) # 添加编译选项,用于指定TensorRT路径
27- # 检查 TensorRT 路径是否已设置
24+ option (TENSORRT_PATH "TensorRT Path. Example: /usr/local/tensorrt" "" )
2825if (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." )
3027endif ()
3128
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的函数
3343function (configure_cuda_trt target )
34- # 添加CUDA定义、包含目录、链接库
3544 target_compile_definitions (${target} PRIVATE ${CUDA_DEFINITIONS} )
3645 target_include_directories (${target} PRIVATE ${CUDA_INCLUDE_DIRS} )
3746 target_link_libraries (${target} PRIVATE ${CUDA_cudart_LIBRARY} )
3847
39- # 添加TensorRT的包含目录、库目录、链接库
4048 target_include_directories (${target} PRIVATE ${TENSORRT_PATH} /include )
4149 target_link_directories (${target} PRIVATE ${TENSORRT_PATH} /lib)
4250 if (MSVC AND EXISTS ${TENSORRT_PATH} /lib/nvinfer_10.dll)
@@ -46,66 +54,76 @@ function(configure_cuda_trt target)
4654 endif ()
4755endfunction ()
4856
57+ # 添加源文件的函数
4958function (add_compile_files target )
50- # 添加头文件搜索路径
51- include_directories (${PROJECT_SOURCE_DIR} /include )
59+ include_directories (${PROJECT_SOURCE_DIR} )
5260 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
5766 )
58- # 添加源文件
59- target_sources (${target} PRIVATE ${SOURCES} )
67+ target_sources (${target} PRIVATE ${SOURCES} )
6068endfunction ()
6169
70+ # 设置编译选项的函数
6271function (set_compile_options target )
63-
6472 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>" )
6775 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>)
7078 endif ()
71-
7279endfunction ()
7380
7481# 添加子目录
75- add_subdirectory (${PROJECT_SOURCE_DIR} /plugin) # 添加插件目录
82+ add_subdirectory (${PROJECT_SOURCE_DIR} /plugin)
7683
7784# 定义目标 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)
9190
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) # 设置输出名称
9891if (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+ )
10198else ()
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)
103100endif ()
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