工程文件
# CMake需要的最低版本号是3.4.1
cmake_minimum_required(VERSION 3.4.1)
# 指定了项目的名称
project(rknn_sanli)
# 不使用任何C编译器标志,使用C++11标准进行编译
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# rknn api
set(RKNN_API_PATH ${CMAKE_SOURCE_DIR}/3rdparty/librknn_api) #该变量定义了RKNN API库的路径
set(LIB_ARCH aarch64)
set(RKNN_RT_LIB ${RKNN_API_PATH}/${LIB_ARCH}/librknnrt.so) # 该变量定义了RKNN运行时库的路径。
include_directories(${RKNN_API_PATH}/include) # 添加RKNN API的头文件
message(STATUS "The value of RKNN_API_PATH is: ${RKNN_API_PATH}")
message(STATUS "The value of RKNN_RT_LIB is: ${RKNN_RT_LIB}")
# opencv
set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/3rdparty/opencv/share/OpenCV) # 指定了OpenCV库的路径。
find_package(OpenCV REQUIRED) # 自动查找OpenCV库,并将相关信息保存在CMake内置变量中
file (GLOB MAIN_SRC
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
)
file (GLOB MAIN_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/src/*.h
)
# 指定了程序运行时查找动态链接库的路径
set(CMAKE_INSTALL_RPATH "lib")
# 创建一个可执行文件
add_executable(${PROJECT_NAME}
${MAIN_SRC} ${MAIN_HEADERS}
src/main.cc
)
# 指定工程需要链接的库文件
target_link_libraries(${PROJECT_NAME}
${RKNN_RT_LIB}
${OpenCV_LIBS}
)
# 指定了程序安装的路径
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/${PROJECT_NAME}_${CMAKE_SYSTEM_NAME})
# 拷贝可执行程序和需要用的库以及后面测试要用到的model测试文件
install(TARGETS ${PROJECT_NAME} DESTINATION ./)
install(DIRECTORY model DESTINATION ./)
install(PROGRAMS ${RKNN_RT_LIB} DESTINATION lib)
解析
这个CMakeLists.txt文件是一个配置脚本,用于构建一个名为rknn_sanli的项目。下面是对这个脚本的详细解释:
-
设置CMake最低版本要求:
cmake_minimum_required(VERSION 3.4.1)这一行指定了构建此项目所需的CMake的最低版本为3.4.1。
-
定义项目名称:
project(rknn_sanli)这里定义了项目的名称为
rknn_sanli。 -
设置编译器标志:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")第一行实际上没有改变C编译器的任何标志。第二行则指定C++编译器使用C++11标准。
-
配置RKNN API库:
set(RKNN_API_PATH ${CMAKE_SOURCE_DIR}/3rdparty/librknn_api)set(LIB_ARCH aarch64)set(RKNN_RT_LIB ${RKNN_API_PATH}/${LIB_ARCH}/librknnrt.so)include_directories(${RKNN_API_PATH}/include)这几行设置了RKNN API的路径、库文件的架构(aarch64)以及运行时库的路径,并添加了RKNN API的头文件目录。
-
输出RKNN路径信息:
message(STATUS "The value of RKNN_API_PATH is: ${RKNN_API_PATH}")message(STATUS "The value of RKNN_RT_LIB is: ${RKNN_RT_LIB}")这两行在配置过程中输出RKNN API和运行时库的路径,以便于调试和确认配置是否正确。
-
配置OpenCV库:
set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/3rdparty/opencv/share/OpenCV)find_package(OpenCV REQUIRED)这里指定了OpenCV的配置文件路径,并使用
find_package命令来查找和配置OpenCV库。 -
收集源文件:
file (GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)file (GLOB MAIN_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/*.h)使用
file(GLOB ...)命令收集所有的C++源文件和头文件。 -
设置运行时库路径:
set(CMAKE_INSTALL_RPATH "lib")这一行设置了程序在运行时查找动态链接库的路径。
-
添加可执行文件:
add_executable(${PROJECT_NAME} ${MAIN_SRC} ${MAIN_HEADERS} src/main.cc)这里添加了一个可执行文件,该文件由收集到的源文件和头文件以及
src/main.cc编译而成。 -
链接库文件:
target_link_libraries(${PROJECT_NAME} ${RKNN_RT_LIB} ${OpenCV_LIBS})这一行指定了可执行文件需要链接的库,包括RKNN运行时库和OpenCV库。
-
设置安装路径和安装规则:
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/${PROJECT_NAME}_${CMAKE_SYSTEM_NAME})install(TARGETS ${PROJECT_NAME} DESTINATION ./)install(DIRECTORY model DESTINATION ./)install(PROGRAMS ${RKNN_RT_LIB} DESTINATION lib)这些行设置了项目的安装前缀,并定义了安装规则,包括可执行文件、模型文件和RKNN运行时库的安装位置。
总的来说,这个CMakeLists.txt文件配置了一个使用RKNN API和OpenCV库的项目,并定义了构建、链接和安装规则。

604

被折叠的 条评论
为什么被折叠?



