|
|
cmake_minimum_required(VERSION 3.10)
|
|
|
project(QGuideArith VERSION 1.0 LANGUAGES CXX)
|
|
|
|
|
|
# 启用 C++17
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
|
|
|
|
|
set(BUILD_ARITH_STUDIO FALSE) # 设置是否构建算法平台
|
|
|
|
|
|
set(BUILD_AI_ONNX_DETECT FALSE) # 设置是否基于ONNX构建AI识别模块
|
|
|
set(BUILD_AI_CUDA_DETECT FALSE) # 设置是否基于CUDA构建AI识别模块
|
|
|
|
|
|
set(BUILD_AI_TRACK FALSE) # 设置是否构建AI跟踪模块
|
|
|
|
|
|
# 指定交叉编译工具链
|
|
|
set(CMAKE_C_COMPILER /opt/x64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc)
|
|
|
set(CMAKE_CXX_COMPILER /opt/x64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++)
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
|
|
|
|
|
message("project root path is ${CMAKE_CURRENT_SOURCE_DIR}")
|
|
|
message("compiler is ${CMAKE_CXX_COMPILER}")
|
|
|
# 添加编译类型选项
|
|
|
option(USE_DEBUG "Compile in debug mode" OFF)
|
|
|
message("USE_DEBUG is ${USE_DEBUG}")
|
|
|
# 根据选项设置编译类型和编译标志
|
|
|
if(USE_DEBUG)
|
|
|
set(CMAKE_BUILD_TYPE "Debug")
|
|
|
set(CMAKE_CXX_FLAGS_DEBUG "-fPIC -g -Wall")
|
|
|
message(STATUS "Compiling in Debug mode")
|
|
|
else()
|
|
|
set(CMAKE_BUILD_TYPE "Release")
|
|
|
set(CMAKE_CXX_FLAGS_RELEASE "-fPIC -Ofast -O3 -ffast-math -march=armv8-a -Wall")
|
|
|
message(STATUS "Compiling in Release mode")
|
|
|
endif()
|
|
|
|
|
|
|
|
|
# ###########################架构优化开关#####################################
|
|
|
MESSAGE(STATUS "********************************************")
|
|
|
|
|
|
if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
|
|
|
add_definitions(-DNEON)
|
|
|
add_definitions(-DUSE_CPUBIND)
|
|
|
SET(CMAKE_BUILD_TYPE "Release")
|
|
|
MESSAGE(STATUS "build on aarch64+++++++++++++++++++++++,add_definitions -DARM64")
|
|
|
elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "AMD64" OR "64")
|
|
|
message(STATUS "this is AMD64 cpu **")
|
|
|
endif()
|
|
|
|
|
|
MESSAGE(STATUS "********************************************")
|
|
|
|
|
|
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
|
|
|
|
|
# 设置源码路径宏
|
|
|
set(SOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
|
|
# 将路径编码,便于各人模型文件的路径一致
|
|
|
add_definitions(-DSOURCE_PATH=\"${SOURCE_PATH}\")
|
|
|
|
|
|
# ##########################全局配置##############################
|
|
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
# set(CMAKE_SKIP_BUILD_RPATH ON)
|
|
|
|
|
|
# 为win下使用vs编译器强制启用 UTF-8 编码
|
|
|
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/source-charset:utf-8>")
|
|
|
|
|
|
# 强制编译器检查类型问题
|
|
|
# add_compile_options(-Werror)
|
|
|
# add_compile_options(-Wreturn-type)
|
|
|
|
|
|
#
|
|
|
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-Werror,-Bsymbolic")
|
|
|
|
|
|
# 设置全局编译选项
|
|
|
|
|
|
# 开启单元测试:算法模块单元测试
|
|
|
ENABLE_TESTING()
|
|
|
|
|
|
# ########################## 第三方库 ##############################
|
|
|
# SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")
|
|
|
|
|
|
set(OpenCV_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/opencv_RK/opencv")
|
|
|
set(OpenCV_INCLUDES ${OpenCV_DIR}/include/opencv4)
|
|
|
set(OPENCV_LIB_DIR ${OpenCV_DIR}/lib)
|
|
|
FILE(GLOB OpenCV_LIBS "${OPENCV_LIB_DIR}/*")
|
|
|
|
|
|
# 设置 zlib 路径
|
|
|
set(ZLIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/zlib_rk3588")
|
|
|
FILE(GLOB ZLIBS "${ZLIB_DIR}/lib/*")
|
|
|
# ########################## AI ONNX支持库配置 ###########################
|
|
|
IF(BUILD_AI_ONNX_DETECT)
|
|
|
add_definitions(-DENABLE_AI_ONNX_DETECT)
|
|
|
SET(Arith_AIDET_DIR AIDetector/x86_onnx) # AI识别库
|
|
|
SET(Arith_AIDET_SRC_DIR ${Arith_AIDET_DIR}/src)
|
|
|
|
|
|
IF(WIN32)
|
|
|
set(LIB_Arith_AIDET_NAME libAIDetector)
|
|
|
ELSE(WIN32)
|
|
|
set(LIB_Arith_AIDET_NAME AIDetector)
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
add_subdirectory(${Arith_AIDET_DIR})
|
|
|
ENDIF()
|
|
|
|
|
|
# ########################## AI CUDA支持库配置 ##########################
|
|
|
IF(BUILD_AI_CUDA_DETECT)
|
|
|
add_definitions(-DENABLE_AI_CUDA_DETECT)
|
|
|
SET(Arith_AIDET_DIR AIDetector/x86_cuda) # AI识别库
|
|
|
SET(Arith_AIDET_SRC_DIR ${Arith_AIDET_DIR}/src)
|
|
|
|
|
|
IF(WIN32)
|
|
|
set(LIB_Arith_AIDET_NAME libAIDetector)
|
|
|
ELSE(WIN32)
|
|
|
set(LIB_Arith_AIDET_NAME AIDetector)
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
add_subdirectory(${Arith_AIDET_DIR})
|
|
|
ENDIF()
|
|
|
|
|
|
# ########################## AI跟踪支持库配置 ###########################
|
|
|
IF(BUILD_AI_TRACK)
|
|
|
add_definitions(-DENABLE_AI_TRACK)
|
|
|
SET(Arith_AITRACK_DIR AITracker/x86) # AI跟踪库
|
|
|
SET(Arith_AITRACK_SRC_DIR ${Arith_AITRACK_DIR}/src)
|
|
|
|
|
|
IF(WIN32)
|
|
|
set(LIB_Arith_AITRK_NAME libAITracker)
|
|
|
ELSE(WIN32)
|
|
|
set(LIB_Arith_AITRK_NAME AITracker)
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
add_subdirectory(${Arith_AITRACK_DIR})
|
|
|
ENDIF()
|
|
|
|
|
|
# ########################## 算法库配置 ##############################
|
|
|
SET(ArithDIR NeoTracker)
|
|
|
SET(ArithSrcDIR ${ArithDIR}/src)
|
|
|
SET(SVMmodelsDIR ${ArithSrcDIR}/SVM/models)
|
|
|
# 设置算法库目录
|
|
|
IF(WIN32)
|
|
|
set(LIB_TRACKER libGuideTracker)
|
|
|
ELSE(WIN32)
|
|
|
set(LIB_TRACKER GuideTracker)
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
# 添加算法子目录
|
|
|
add_subdirectory(${ArithDIR})
|
|
|
|
|
|
IF(BUILD_ARITH_STUDIO)
|
|
|
# ########################## Qt环境 ##############################
|
|
|
IF(WIN32)
|
|
|
set(CMAKE_PREFIX_PATH "D:/Qt/5.15.2/msvc2019_64")
|
|
|
ELSE(WIN32)
|
|
|
set(CMAKE_PREFIX_PATH "/home/wang/Qt/5.15.2/gcc_64")
|
|
|
ENDIF(WIN32)
|
|
|
|
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools)
|
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools)
|
|
|
find_package(Qt5 REQUIRED COMPONENTS PrintSupport)
|
|
|
set(TS_FILES QGuideArith_zh_CN.ts)
|
|
|
|
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
set(CMAKE_AUTORCC ON)
|
|
|
|
|
|
# 引入算法头文件
|
|
|
include_directories(${ArithSrcDIR})
|
|
|
include_directories(${ArithSrcDIR2})
|
|
|
include_directories(${ArithSrcDIR3})
|
|
|
include_directories(${ArithLogSrcDIR})
|
|
|
|
|
|
|
|
|
include_directories(${Arith_AIDET_SRC_DIR})
|
|
|
include_directories(${Arith_AITRACK_SRC_DIR})
|
|
|
include_directories(${Arith_EXTTLD_SRC_DIR})
|
|
|
|
|
|
# 算法平台源文件
|
|
|
SET(QGuideArith_DIR ${CMAKE_SOURCE_DIR}/QGuideArithStudio/src)
|
|
|
|
|
|
# 包含本地路径,否则qt提升类报错
|
|
|
include_directories(${QGuideArith_DIR})
|
|
|
|
|
|
# 日志:SPDLOG
|
|
|
# include_directories(${CMAKE_SOURCE_DIR}/3rdParty)
|
|
|
FILE(GLOB PROJECT_SOURCES ${QGuideArith_DIR}/*.cpp ${QGuideArith_DIR}/*.h
|
|
|
${QGuideArith_DIR}/*.ui
|
|
|
${QGuideArith_DIR}/*.qrc
|
|
|
${QGuideArith_DIR}/*.rc
|
|
|
${CMAKE_SOURCE_DIR}/QGuideArithStudio/src/Project/*.cpp
|
|
|
${TS_FILES})
|
|
|
|
|
|
# 生成可执行文件
|
|
|
add_executable(QGuideArith ${PROJECT_SOURCES})
|
|
|
|
|
|
# 可执行文件输出路径
|
|
|
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/Bin)
|
|
|
|
|
|
# 关闭控制台
|
|
|
set_target_properties(QGuideArith PROPERTIES WIN32_EXECUTABLE TRUE)
|
|
|
|
|
|
# 链接模块
|
|
|
target_link_libraries(QGuideArith PRIVATE
|
|
|
${LIB_TRACKER} # 标准新跟踪器NeoTracker
|
|
|
${LIB_Arith_AIDET_NAME} # ai检测
|
|
|
${LIB_Arith_AITRK_NAME} # ai跟踪
|
|
|
${ZLIBS}
|
|
|
${OpenCV_LIBS} # opencv
|
|
|
Qt${QT_VERSION_MAJOR}::Core
|
|
|
Qt${QT_VERSION_MAJOR}::Gui
|
|
|
Qt${QT_VERSION_MAJOR}::Widgets
|
|
|
Qt${QT_VERSION_MAJOR}::PrintSupport
|
|
|
)
|
|
|
ENDIF(BUILD_ARITH_STUDIO)
|
|
|
#configure_file(${SVMmodelsDIR}/scaled_fly_bird_train.model ${EXECUTABLE_OUTPUT_PATH}/scaled_fly_bird_train.model COPYONLY)
|
|
|
|