2024-05-18 23:53:26 +08:00
|
|
|
# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置
|
|
|
|
|
# 并包含子项目。
|
|
|
|
|
#
|
2024-08-07 09:16:35 +00:00
|
|
|
message(STATUS "CMake version: ${CMAKE_VERSION}")
|
2024-08-07 18:25:43 +08:00
|
|
|
cmake_minimum_required(VERSION 3.16.0)
|
2024-05-18 23:53:26 +08:00
|
|
|
project(handdleai VERSION 0.1.0)
|
|
|
|
|
string(TIMESTAMP RUN_TIME)
|
|
|
|
|
message( " project start : " ${RUN_TIME})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
|
2024-08-07 09:16:35 +00:00
|
|
|
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()
|
2024-05-18 23:53:26 +08:00
|
|
|
# 默认生成参数设置
|
|
|
|
|
if(NE_DEVELOPER_DEFAULTS)
|
2024-08-07 09:16:35 +00:00
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
2024-05-18 23:53:26 +08:00
|
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
2024-08-07 09:16:35 +00:00
|
|
|
SET(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
2024-05-18 23:53:26 +08:00
|
|
|
# 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")
|
2024-08-07 09:16:35 +00:00
|
|
|
SET( ${child}_target_link "opencv_world4100d" )
|
2024-05-18 23:53:26 +08:00
|
|
|
else()
|
2024-08-07 09:16:35 +00:00
|
|
|
SET( ${child}_target_link "opencv_world4100" )
|
2024-05-18 23:53:26 +08:00
|
|
|
endif()
|
|
|
|
|
elseif(${child} MATCHES "halcon")
|
|
|
|
|
SET( ${child}_target_link
|
2024-08-07 09:16:35 +00:00
|
|
|
"halcon"
|
|
|
|
|
"halconcpp"
|
|
|
|
|
"hdevenginecpp" )
|
2024-05-18 23:53:26 +08:00
|
|
|
elseif(${child} MATCHES "keyence3D")
|
|
|
|
|
SET( ${child}_target_link
|
|
|
|
|
"LJX8_IF" )
|
2024-08-07 09:16:35 +00:00
|
|
|
elseif(${child} MATCHES "python")
|
|
|
|
|
#set(PYTHON_EXECUTABLE "${PROJECT_ROOT_PATH}/env/python/Python37")
|
|
|
|
|
SET( ${child}_target_link
|
|
|
|
|
"_tkinter"
|
|
|
|
|
"python3"
|
|
|
|
|
"python312")
|
2024-05-18 23:53:26 +08:00
|
|
|
elseif(${child} MATCHES "basler")
|
|
|
|
|
SET( ${child}_target_link
|
|
|
|
|
"PylonC.lib" )
|
|
|
|
|
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")
|
2024-08-07 09:16:35 +00:00
|
|
|
SET( ${child}_target_link "3DAlg")
|
2024-05-18 23:53:26 +08:00
|
|
|
else()
|
2024-08-07 09:16:35 +00:00
|
|
|
SET( ${child}_target_link "3DAlg")
|
2024-05-18 23:53:26 +08:00
|
|
|
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})
|
|
|
|
|
|
|
|
|
|
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})
|
|
|
|
|
|