You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

211 lines
6.5 KiB

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 TRUE) # 设置是否构建算法平台
set(BUILD_AI_ONNX_DETECT TRUE) # 设置是否基于ONNX构建AI识别模块
set(BUILD_AI_CUDA_DETECT FALSE) # 设置是否基于CUDA构建AI识别模块
set(BUILD_AI_TRACK FALSE) # 设置是否构建AI跟踪模块
# ###########################架构优化开关#####################################
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")
# opencv + TensorRT
IF(WIN32)
set(OpenCV_DIR "D:/Opencv_v/4.8.1/build/install/x64/vc17/lib")
set(TRT_DIR "D:/TensorRT/TensorRT7")
ELSE(WIN32)
set(OpenCV_DIR "/home/wcw/opencv-3.4.16/install/share/OpenCV")
ENDIF(WIN32)
find_package(OpenCV REQUIRED)
if(OpenCV_VERSION VERSION_LESS "4.6")
add_definitions(-DOPENCV_LEGACY)
message(STATUS "OPENCV_LEGACY")
else()
add_definitions(-DOPENCV_MODERN)
message(STATUS "OPENCV_MODERN")
endif()
# 全局包含opencv
include_directories(${OpenCV_INCLUDE_DIRS})
# 链接必要的opencv库
SET(${OpenCV_lib_use} opencv_core)
# ########################## 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跟踪
${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)