# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置 # 并包含子项目。 # cmake_minimum_required(VERSION 3.0.0) project(handdleai VERSION 0.1.0) string(TIMESTAMP RUN_TIME) message( " project start : " ${RUN_TIME}) set(CMAKE_AUTOMOC ON) SET(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) set(CMAKE_DISABLE_SOURCE_CHANGES ON) get_directory_property(_has_parent PARENT_DIRECTORY) if(_has_parent) set(is_root_project OFF) else() set(is_root_project ON) endif() set(NE_DEVELOPER_DEFAULTS "${is_root_project}" CACHE BOOL "Turns on default settings for development of QTdemo") option(BUILD_EXAMPLES "Build Examples" "${NE_DEVELOPER_DEFAULTS}") option(BUILD_MODULES "Build Modules" "${NE_DEVELOPER_DEFAULTS}") option(BUILD_DEBUG_POSTFIX_D "Append d suffix to debug libraries" OFF) # 默认生成参数设置 if(NE_DEVELOPER_DEFAULTS) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_EXTENSIONS OFF) # PROJECT_BINARY_DIR 指build生成所在文件夹 # PROJECT_SOURCE_DIR 指最外层CMakeLists.txt所在文件夹 # CMAKE_CURRENT_SOURCE_DIR 指正在处理的CMakeLists.txt所在文件夹 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/lib") set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/lib") SET(PROJECT_ROOT_PATH ${PROJECT_SOURCE_DIR}) endif() if (MSVC_VERSION GREATER_EQUAL "1900") include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("/std:c++17" _cpp_latest_flag_supported) if (_cpp_latest_flag_supported) add_compile_options("/std:c++17") else() message(WARNING "Compiler does not support C++17 standard.") endif() else() message(WARNING "MSVC version is not supported.") endif() ################## # 获取默认库路径 # 记录 // include // lib // 子文件夹名 ## if(ON) # SUBDIRENAMES 遍历子文件夹 # ISAbsolutePath ON 子文件夹路径名 OFF 读取文件名 macro(SUBDIRENAMES result curdir _temp ISAbsolutePath) file(GLOB children RELATIVE ${curdir} ${curdir}/*${_temp}) set(dirlist "") foreach(child ${children}) if(IS_DIRECTORY ${curdir}/${child} ) if(${child} MATCHES .*${_temp}) if(${ISAbsolutePath}) LIST(APPEND dirlist ${curdir}/${child}) else() LIST(APPEND dirlist ${child}) endif() endif() endif() endforeach() set(${result} ${dirlist}) endmacro() ########## ####################### 自动查询路径下库文件 include lib 拷贝dll # macro(FINDDLLDIR result Includes Libs ISMoveDll) SET(envs "") if(${ISMoveDll}) if(EXISTS ${result}/dll) message("[!] Move dll :" ${result}/dll ) file(COPY ${result}/dll/ DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) else() message("[!] Move dll Fail Dir is not exists !" ${result}/dll) endif() endif() list(APPEND ${Includes} ${result}/include) SUBDIRENAMES(envs ${result}/include "" ON) list(APPEND ${Includes} ${envs}) SUBDIRENAMES(envs ${result} "lib" ON) list(APPEND ${Libs} ${envs}) endmacro() ######################### 去除重复项 # macro(REMOVE_DUPLICATES result ) SET(DUP "") message("[!] RESULT : " ${result}) foreach(var ${result}) list(FIND DUP ${var} _index) if(${_index} GREATER -1) message("[!] HAVE : " ${var} ) else() message("[!] ADD : " ${var}) list(APPEND DUP ${var}) endif() endforeach() set(${result} ${DUP}) endmacro() ######################### if(CMAKE_SYSTEM_NAME STREQUAL "Linux") if(${LinuxSystem} STREQUAL "ARM") message("当前未配置Linux路径!") endif() else() if(MSVC) # 遍历ENV 文件夹下库 # 当前已有库 opencv410 halcon18.05 handdleAI2.2.5.6 基恩士keyence3D 海康mvs3.3.1 SET(ENVPATH ${PROJECT_ROOT_PATH}/env) #设置遍历库路径 SUBDIRENAMES(envs ${ENVPATH} "" OFF) #自动遍历 # 设置引用库名 #set(envs "opencv" "halcon" "keyence3D" "keyence2_5D" "mvs" "handdleAI" "Dalsa" "LMI" "3dAI" "927Dll")#手动设置引用库模块 foreach(child ${envs}) message("DLL NAME: " ${child}) FINDDLLDIR(${ENVPATH}/${child} ${child}_include ${child}_lib ON) message(${child}_include: ${${child}_include} ) message(${child}_lib: ${${child}_lib}) if(${child} MATCHES "opencv") if(CMAKE_BUILD_TYPE MATCHES "Debug") SET( ${child}_target_link "opencv_world410d" ) else() SET( ${child}_target_link "opencv_world410" ) endif() elseif(${child} MATCHES "3DAI") SET( ${child}_target_link "cosmeticAlg" ) elseif(${child} MATCHES "basler") SET( ${child}_target_link "GCBase_MD_VC141_v3_1_Basler_pylon" "GenApi_MD_VC141_v3_1_Basler_pylon" "PylonBase_v7_3" "PylonC" "PylonC_v7_3" "PylonDataProcessing_v1_2" "PylonGUI_v7_3" "PylonUtility_v7_3" ) elseif(${child} MATCHES "CSTLightSource") SET( ${child}_target_link "CommonToolDll" "ControllerDll" "sControllerDll" ) elseif(${child} MATCHES "DaHeng") SET( ${child}_target_link "GxIAPICPPEx" ) elseif(${child} MATCHES "dahua") SET( ${child}_target_link "MVSDKmd" ) elseif(${child} MATCHES "Dalsa") SET( ${child}_target_link "corapi" "SapClassBasic" "SapClassGui") elseif(${child} MATCHES "halcon") SET( ${child}_target_link "halcon" "halconcpp" "hdevenginecpp" ) elseif(${child} MATCHES "handdleAI") if(CMAKE_BUILD_TYPE MATCHES "Debug") SET( ${child}_target_link "handleAI" ) else() SET( ${child}_target_link "handleAI" ) endif() elseif(${child} MATCHES "HslComunnicationCpp") SET( ${child}_target_link "HslComunnicationCpp" ) elseif(${child} MATCHES "ITEK") SET( ${child}_target_link "IKapBoard" "IKapC" ) elseif(${child} MATCHES "keyence2_5D") SET( ${child}_target_link "kglib" ) elseif(${child} MATCHES "keyence3D") SET( ${child}_target_link "LJX8_IF" ) elseif(${child} MATCHES "LMI") SET( ${child}_target_link "GoSdk" "kApi" ) elseif(${child} MATCHES "mvs") SET( ${child}_target_link "MvCameraControl" ) elseif(${child} MATCHES "myTools") if(CMAKE_BUILD_TYPE MATCHES "Debug") SET( ${child}_target_link "myToolsd" ) else() SET( ${child}_target_link "myTools" ) endif() elseif(${child} MATCHES "OPT") SET( ${child}_target_link "OPTSDK" ) elseif(${child} MATCHES "Sszn3D") SET( ${child}_target_link "SR7Link" ) elseif(${child} MATCHES "YiShi") if(CMAKE_BUILD_TYPE MATCHES "Debug") SET( ${child}_target_link "nvt_lvm_sdkd" ) else() SET( ${child}_target_link "nvt_lvm_sdk" ) endif() else() SET( ${child}_target_link "" ) endif() message(${child}_target_link: ${${child}_target_link}) endforeach() # QT path qt5.14.2 set(Qt5_DIR ${PROJECT_ROOT_PATH}/env/qt5/lib/cmake/Qt5) set(QT_DIR ${Qt5_DIR}) set(qtlist "Core" "Widgets" "Network" "Gui" "PrintSupport" "Concurrent" "Charts") find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) message("QT_Version :" Qt${QT_VERSION_MAJOR}) #base_UI通用UI接口 set(base_UI ${PROJECT_ROOT_PATH}/env/base_UI) #927 自定义dll #SET( 927Dll_include ${PROJECT_ROOT_PATH}/include ) #SET( 927Dll_lib ${PROJECT_ROOT_PATH}/lib ) #SET( 927Dll_target_link "Hd_AI_927_DET" ) add_definitions(-DQT_MESSAGELOGCONTEXT)#打开QT日志信息 endif() endif() endif() ################## # 设置dll后缀 ## if(BUILD_DEBUG_POSTFIX_D) set(CMAKE_DEBUG_POSTFIX d) endif() ################## # Automated modules ## if(BUILD_MODULES) if(CMAKE_BUILD_TYPE MATCHES "Debug") add_subdirectory(BaseModules) #add_subdirectory(Hd_AI_927_DET) else() add_subdirectory(BaseModules) #add_subdirectory(Hd_AI_927_DET) endif() endif() # 包含子项目。 ################## # Automated examples ## if(BUILD_EXAMPLES) add_subdirectory(HanddleAI) endif() add_compile_options("$<$:/utf-8>") add_compile_options("$<$:/utf-8>") string(TIMESTAMP RUN_TIME) message( " project end : " ${RUN_TIME})