工程文件解析

工程文件

# 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的项目。下面是对这个脚本的详细解释:

  1. 设置CMake最低版本要求

    cmake_minimum_required(VERSION 3.4.1)

    这一行指定了构建此项目所需的CMake的最低版本为3.4.1。

  2. 定义项目名称

    project(rknn_sanli)

    这里定义了项目的名称为rknn_sanli

  3. 设置编译器标志

    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

    第一行实际上没有改变C编译器的任何标志。第二行则指定C++编译器使用C++11标准。

  4. 配置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的头文件目录。

  5. 输出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和运行时库的路径,以便于调试和确认配置是否正确。

  6. 配置OpenCV库

    set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/3rdparty/opencv/share/OpenCV)
    find_package(OpenCV REQUIRED)

    这里指定了OpenCV的配置文件路径,并使用find_package命令来查找和配置OpenCV库。

  7. 收集源文件

    file (GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
    file (GLOB MAIN_HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/*.h)

    使用file(GLOB ...)命令收集所有的C++源文件和头文件。

  8. 设置运行时库路径

    set(CMAKE_INSTALL_RPATH "lib")

    这一行设置了程序在运行时查找动态链接库的路径。

  9. 添加可执行文件

    add_executable(${PROJECT_NAME} ${MAIN_SRC} ${MAIN_HEADERS} src/main.cc)

    这里添加了一个可执行文件,该文件由收集到的源文件和头文件以及src/main.cc编译而成。

  10. 链接库文件

     
    target_link_libraries(${PROJECT_NAME} ${RKNN_RT_LIB} ${OpenCV_LIBS})

    这一行指定了可执行文件需要链接的库,包括RKNN运行时库和OpenCV库。

  11. 设置安装路径和安装规则

    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库的项目,并定义了构建、链接和安装规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值