Files
2024-02-27 14:55:36 +08:00

238 lines
8.0 KiB
CMake

# 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})
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")
endif()
endif()
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()
##################
# 获取默认库路径
# 记录 // 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" "zxingD" "3dAI" "984Dll")#手动设置引用库模块
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 "halcon")
SET( ${child}_target_link
"halcon"
"halconcpp"
"hdevenginecpp" )
elseif(${child} MATCHES "keyence3D")
SET( ${child}_target_link
"LJX8_IF" )
elseif(${child} MATCHES "sqlite")
SET( ${child}_target_link
"sqlite3" )
elseif(${child} MATCHES "myTools")
SET( ${child}_target_link
"myTools" )
elseif(${child} MATCHES "mvs")
SET( ${child}_target_link
"MvCameraControl" )
elseif(${child} MATCHES "Dalsa")
SET( ${child}_target_link
"corapi"
"SapClassBasic"
"SapClassGui")
elseif(${child} MATCHES "keyence2_5D")
SET( ${child}_target_link
"kglib" )
elseif(${child} MATCHES "3DAI")
if(CMAKE_BUILD_TYPE MATCHES "Debug")
SET( ${child}_target_link "cosmeticAlg" "Inspection""zxingD" "algo")
else()
SET( ${child}_target_link "cosmeticAlg" "Inspection""zxing" "algo")
endif()
elseif(${child} MATCHES "handdleAI")
if(CMAKE_BUILD_TYPE MATCHES "Debug")
SET( ${child}_target_link "handleAI" )
else()
SET( ${child}_target_link "handleAI" )
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" "SerialPort")
find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED)
message("QT_Version :" Qt${QT_VERSION_MAJOR})
#984 自定义dll
SET( 984Dll_include ${PROJECT_ROOT_PATH}/include )
SET( 984Dll_lib ${PROJECT_ROOT_PATH}/lib )
SET( 984Dll_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 examples
##
if(BUILD_EXAMPLES)
add_subdirectory(HanddleAI)
endif()
##################
# Automated modules
##
if(BUILD_MODULES)
if(CMAKE_BUILD_TYPE MATCHES "Debug")
add_subdirectory(BaseModules)
else()
add_subdirectory(BaseModules)
endif()
endif()
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
string(TIMESTAMP RUN_TIME)
message( " project end : " ${RUN_TIME})