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 FALSE) # 设置是否基于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("$<$:/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)