linux模板
新建build.sh文件
set -e
export TOOL_CHAIN=/home/ppf/project/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu
GCC_COMPILER=aarch64-linux
export LD_LIBRARY_PATH=${TOOL_CHAIN}/lib64:$LD_LIBRARY_PATH
export CC=${GCC_COMPILER}-gcc
export CXX=${GCC_COMPILER}-g++
ROOT_PWD=$( cd "$( dirname "$0" )" && cd -P "$( dirname "$SOURCE" )" && pwd )
# build
BUILD_DIR=${ROOT_PWD}/build
if [[ ! -d "${BUILD_DIR}" ]]; then
mkdir -p ${BUILD_DIR}
fi
cd ${BUILD_DIR}
cmake .. -DCMAKE_SYSTEM_NAME=Linux
make -j4
#make install
cd -
新建CMakeLists.txt文件
cmake_minimum_required(VERSION 3.4.1)
project(hello)
aux_source_directory(src SRC_SUB)
aux_source_directory(. SRC_CUR)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)#设置可执行文件输出路径
include_directories(include)
add_executable(hello ${SRC_SUB} ${SRC_CUR})
如果使用第三方库需要加上以下代码
cmake_minimum_required(VERSION 3.4.1)
project(hello)
aux_source_directory(src SRC_SUB)
aux_source_directory(. SRC_CUR)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-shlib-undefined")
SET(OpenCV_DIR /home/fmsh/opencv-4.5.5/opencv/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)#设置可执行文件输出路径
include_directories(include)
add_executable(test ${SRC_SUB} ${SRC_CUR})
#用于指定链接到目标可执行文件或库的各种库文件
target_link_libraries(test
opencv_world
)
扩展进阶
cmake_minimum_required(VERSION 3.4.1)
project(rknn_yolov5_demo_c++)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# set(CMAKE_CXX_FLAGS "-pthread")
# skip 3rd-party lib dependencies
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-shlib-undefined")
# install target and libraries
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_yolov5_demo_${CMAKE_SYSTEM_NAME})
set(CMAKE_SKIP_INSTALL_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
#----------------------------------
include_directories(${RKNN_API_PATH}/include)
include_directories(${CMAKE_SOURCE_DIR}/include/3rdparty)
include_directories(${RGA_PATH}/include)
set(LIB_ARCH aarch64)
# mpp
set(MPP_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/mpp)
set(MPP_LIBS ${MPP_PATH}/${CMAKE_SYSTEM_NAME}/${LIB_ARCH}/librockchip_mpp.so)
include_directories(${MPP_PATH}/include)
#------------------------------------------------
# rknn api
set(RKNN_API_PATH ${CMAKE_SOURCE_DIR}/../../runtime/RK3588/${CMAKE_SYSTEM_NAME}/librknn_api)
set(RKNN_RT_LIB ${CMAKE_SOURCE_DIR}/include/librknnrt.so)
include_directories(${CMAKE_SOURCE_DIR}/../3rdparty)
#rga
set(RGA_PATH ${CMAKE_SOURCE_DIR}/include/3rdparty/rga/RK3588)
set(RGA_LIB ${RGA_PATH}/lib/Linux//${LIB_ARCH}/librga.so)
include_directories(${CMAKE_SOURCE_DIR}/include/3rdparty)
include_directories(${RGA_PATH}/include)
#x264
set(x264_libs_DIR /home/fmsh/x264/tmp/lib)
set(x264_headers_DIR /home/fmsh/x264/tmp/include)
add_library(x264 SHARED IMPORTED )
#指定所添加依赖库的导入路径
set_target_properties(x264 PROPERTIES IMPORTED_LOCATION ${x264_libs_DIR}/libx264.so )
#ffmpeg
set(ffmpeg_libs_DIR /home/fmsh/ffmpeg-4.1.3/tmp/lib)
set(ffmpeg_headers_DIR /home/fmsh/ffmpeg-4.1.3/tmp/include)
#对于find_package找不到的外部依赖库,可以用add_library添加
# SHARED表示添加的是动态库
# IMPORTED表示是引入已经存在的动态库
add_library( avcodec SHARED IMPORTED )
#指定所添加依赖库的导入路径
set_target_properties( avcodec PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavcodec.so )
add_library( avfilter SHARED IMPORTED )
set_target_properties( avfilter PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavfilter.so )
add_library( swresample SHARED IMPORTED )
set_target_properties( swresample PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libswresample.so )
add_library( swscale SHARED IMPORTED )
set_target_properties( swscale PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libswscale.so )
add_library( avformat SHARED IMPORTED )
set_target_properties( avformat PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavformat.so )
add_library( avutil SHARED IMPORTED )
set_target_properties( avutil PROPERTIES IMPORTED_LOCATION ${ffmpeg_libs_DIR}/libavutil.so )
# opencv
# set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/include/3rdparty/opencv-linux-aarch64/share/OpenCV)
SET(OpenCV_DIR /home/fmsh/opencv-4.5.5/opencv/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)
# zlmediakit
set(ZLMEDIAKIT_PATH ${CMAKE_SOURCE_DIR}/../3rdparty/zlmediakit)
include_directories(${ZLMEDIAKIT_PATH}/include)
set(ZLMEDIAKIT_LIBS ${ZLMEDIAKIT_PATH}/${LIB_ARCH}/libmk_api.so)
set(CMAKE_INSTALL_RPATH "lib")
# rknn_yolov5_demo
include_directories(
${ffmpeg_headers_DIR}
${CMAKE_SOURCE_DIR}/include
)
add_executable(rknn_yolov5_demo_c++
src/main.cc
src/postprocess.cc
src/preprocess.cc
src/rkYolov5s.cc
src/network_comm.cpp
src/mpp_encoder.cpp
src/mpp_decoder.cpp
)
target_link_libraries(rknn_yolov5_demo_c++
${RKNN_RT_LIB}
# ${OpenCV_LIBS}
${ffmpeg_libs_DIR}
opencv_world
avformat avfilter avcodec avutil swresample swscale
${RGA_LIB}
${MPP_LIBS}
${ZLMEDIAKIT_LIBS}
)
# install target and libraries
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_yolov5_demo_${CMAKE_SYSTEM_NAME})
install(TARGETS rknn_yolov5_demo_c++ DESTINATION ./)
install(PROGRAMS ${RKNN_RT_LIB} DESTINATION lib)
install(PROGRAMS ${RGA_LIB} DESTINATION lib)
install(DIRECTORY model DESTINATION ./)
if(MPP_LIBS)
install(PROGRAMS ${MPP_LIBS} DESTINATION lib)
endif()
if(ZLMEDIAKIT_LIBS)
install(PROGRAMS ${ZLMEDIAKIT_LIBS} DESTINATION lib)
endif()
windows下如何编写
新建CMakeLists.txt
cmake_minimum_required(VERSION 3.28.1)
project(hello)
set(CMAKE_CXX_COMPILER "g++")
aux_source_directory(src SRC_SUB)
aux_source_directory(. SRC_CUR)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)#设置可执行文件输出路径
include_directories(include)
add_executable(hello ${SRC_SUB} ${SRC_CUR})
WinGW和cmake安装完成之后需要将其bin目录添加到环境变量中,是否成功添加到环境变量可以在命令行cmd界面输入g++ --version和cmake --version查看,如果输出了版本号则成功。
ps:安装完WinGW之后,需要将WinGW自带的make工具改一下名称,将WinGW的bin文件夹下的mingw32-make.exe复制一份然后改名为make.exe,不要直接改,mingw32-make.exe在cmake的时候会被调用。不改也行,后面使用make命令的时候需要写mingw32-make。
新建build文件夹在该目录下依次执行以下命令
cmake ..
cmake
最后在bin文件夹下就可以找到生成的可执行文件