完成框架目录和模块重构;新增核心、单例、工具、加密及框架 SDK;统一任务、相机和 RPC 接口,并增加离线检测、相机标定、备份恢复、版本管理、崩溃守护和心跳监控功能。
409 lines
16 KiB
CMake
409 lines
16 KiB
CMake
# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置
|
||
# 并包含子项目。
|
||
#
|
||
message(STATUS "CMake version: ${CMAKE_VERSION}")
|
||
cmake_minimum_required(VERSION 3.14.0)
|
||
project(eui)
|
||
string(TIMESTAMP RUN_TIME)
|
||
message( " project start : " ${RUN_TIME})
|
||
add_compile_definitions(NOMINMAX)
|
||
|
||
include_directories("${CMAKE_BINARY_DIR}/generated")
|
||
|
||
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_UNIT_TESTS "Build unit tests" OFF)
|
||
set(EUI_UNIT_TEST_DIR "${CMAKE_SOURCE_DIR}/../Eui_UnitTest" CACHE PATH
|
||
"External unit test source directory")
|
||
option(EUI_BUILD_SUBMODULES "Build camera and acquisition modules" ON)
|
||
option(EUI_BUILD_RPCMODULES "Build RPC and PLC communication modules" ON)
|
||
option(EUI_BUILD_MISSIONS "Build mission task plugin modules" ON)
|
||
option(EUI_HANDLE_AI_2256 "Use the no-namespace handleAI 2256 ABI" OFF)
|
||
if(EUI_HANDLE_AI_2256)
|
||
add_compile_definitions(EUI_HANDLE_AI_2256)
|
||
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()
|
||
# 默认生成参数设置
|
||
if(NE_DEVELOPER_DEFAULTS)
|
||
set(CMAKE_CXX_STANDARD 17)
|
||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||
SET(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
||
# 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_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR}/bin")
|
||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${PROJECT_SOURCE_DIR}/bin")
|
||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${PROJECT_SOURCE_DIR}/bin")
|
||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${PROJECT_SOURCE_DIR}/bin")
|
||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/lib")
|
||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/lib")
|
||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${PROJECT_SOURCE_DIR}/lib")
|
||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${PROJECT_SOURCE_DIR}/lib")
|
||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${PROJECT_SOURCE_DIR}/lib")
|
||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL "${PROJECT_SOURCE_DIR}/lib")
|
||
SET(PROJECT_ROOT_PATH ${PROJECT_SOURCE_DIR})
|
||
endif()
|
||
|
||
##################
|
||
# 获取默认库路径
|
||
# 记录 // include // lib // 子文件夹名
|
||
##
|
||
|
||
# SUBDIRENAMES 遍历子文件夹
|
||
# ISAbsolutePath ON 子文件夹路径名 OFF 读取文件名
|
||
macro(SUBDIRENAMES result curdir _temp ISAbsolutePath)
|
||
file(GLOB children RELATIVE ${curdir} ${curdir}/*${_temp})
|
||
set(dirlist "")
|
||
foreach(child ${children})
|
||
if("${child}" MATCHES "^\\.")
|
||
continue()
|
||
endif()
|
||
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 "")
|
||
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 (MSVC)
|
||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd /Zi")
|
||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD /Zi")
|
||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG")
|
||
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG")
|
||
add_compile_definitions(_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR=1)
|
||
add_compile_options(/FS)
|
||
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
|
||
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
|
||
endif()
|
||
|
||
if(MSVC)
|
||
# QT path qt5.14.2
|
||
get_filename_component(PARENT_DIR ${PROJECT_SOURCE_DIR} DIRECTORY)
|
||
SET(ENVPATH ${PARENT_DIR}/GlobalCppEnv) #设置遍历库路径
|
||
SUBDIRENAMES(envs ${ENVPATH} "" OFF) #自动遍历
|
||
list(REMOVE_ITEM envs myTools)
|
||
# 设置引用库名
|
||
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")
|
||
SET(${child}_target_link
|
||
"$<$<CONFIG:Debug>:opencv_world410d>$<$<NOT:$<CONFIG:Debug>>:opencv_world410>")
|
||
elseif(${child} MATCHES "opencv4120")
|
||
SET(${child}_target_link
|
||
"$<$<CONFIG:Debug>:opencv_world4120d>$<$<NOT:$<CONFIG:Debug>>:opencv_world4120>")
|
||
elseif(${child} MATCHES "halcon")
|
||
SET( ${child}_target_link
|
||
"halcon"
|
||
"halconcpp"
|
||
"hdevenginecpp" )
|
||
elseif(${child} MATCHES "keyence3D")
|
||
SET( ${child}_target_link
|
||
"LJX8_IF" )
|
||
elseif(${child} MATCHES "python")
|
||
#set(PYTHON_EXECUTABLE "${PROJECT_ROOT_PATH}/env/python/Python37")
|
||
SET( ${child}_target_link
|
||
"_tkinter"
|
||
"python3"
|
||
"python312")
|
||
elseif(${child} MATCHES "csFins")
|
||
#set(PYTHON_EXECUTABLE "${PROJECT_ROOT_PATH}/env/python/Python37")
|
||
SET( ${child}_target_link
|
||
"cs_finsTcp"
|
||
"CsFins.Native")
|
||
elseif(${child} MATCHES "pyDirectFins")
|
||
#set(PYTHON_EXECUTABLE "${PROJECT_ROOT_PATH}/env/python/Python37")
|
||
SET( ${child}_target_link
|
||
"pyDirectFinsTcp"
|
||
"PyFinsHost"
|
||
"python3"
|
||
"python312")
|
||
elseif(${child} MATCHES "boost")
|
||
SET( ${child}_target_link
|
||
"libboost_python312-vc143-mt-sgd-x64-1_86"
|
||
"libboost_python312-vc143-mt-s-x64-1_86"
|
||
"libboost_thread-vc143-mt-gd-x64-1_86"
|
||
"libboost_chrono-vc143-mt-gd-x64-1_86")
|
||
elseif(${child} MATCHES "basler")
|
||
SET( ${child}_target_link
|
||
"PylonC.lib" )
|
||
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")
|
||
SET(${child}_target_link "3DAlg")
|
||
elseif("${child}" STREQUAL "handdleAI")
|
||
if(EUI_HANDLE_AI_2256)
|
||
SET(${child}_target_link
|
||
"$<$<CONFIG:Debug>:handleAId2256>$<$<NOT:$<CONFIG:Debug>>:handleAI2256>")
|
||
else()
|
||
SET(${child}_target_link
|
||
"$<$<CONFIG:Debug>:handleAId>$<$<NOT:$<CONFIG:Debug>>:handleAI>")
|
||
endif()
|
||
elseif(${child} MATCHES "spdLog")
|
||
SET(${child}_target_link
|
||
"$<$<CONFIG:Debug>:spdlogd>$<$<NOT:$<CONFIG:Debug>>:spdlog>")
|
||
elseif(${child} MATCHES "crashpad")
|
||
# Crashpad 客户端静态库(供 launcher 链接)。
|
||
# 库集合与命名已通过独立 link test 验证(MSVC /std:c++17 /MD[d]):
|
||
# Release 用 xxx.lib,Debug 用 xxx_d.lib,均放在 GlobalCppEnv/crashpad/lib。
|
||
# crashpad_handler.exe 是独立可执行文件,随包部署,不在此链接。
|
||
SET(${child}_target_link
|
||
"$<$<CONFIG:Debug>:client_d>$<$<NOT:$<CONFIG:Debug>>:client>"
|
||
"$<$<CONFIG:Debug>:client_common_d>$<$<NOT:$<CONFIG:Debug>>:client_common>"
|
||
"$<$<CONFIG:Debug>:util_d>$<$<NOT:$<CONFIG:Debug>>:util>"
|
||
"$<$<CONFIG:Debug>:base_d>$<$<NOT:$<CONFIG:Debug>>:base>"
|
||
"$<$<CONFIG:Debug>:compat_d>$<$<NOT:$<CONFIG:Debug>>:compat>"
|
||
"$<$<CONFIG:Debug>:zlib_d>$<$<NOT:$<CONFIG:Debug>>:zlib>"
|
||
"$<$<CONFIG:Debug>:net_d>$<$<NOT:$<CONFIG:Debug>>:net>"
|
||
"$<$<CONFIG:Debug>:context_d>$<$<NOT:$<CONFIG:Debug>>:context>"
|
||
"Advapi32"
|
||
"Rpcrt4"
|
||
"Winhttp"
|
||
"version"
|
||
"User32"
|
||
"Psapi")
|
||
# crashpad_handler.exe 需部署到 launcher 同目录;这里记录其绝对路径,
|
||
# 由 launcher 的 POST_BUILD 拷贝到输出 bin 目录。
|
||
set(CRASHPAD_HANDLER_EXE "${ENVPATH}/${child}/bin/crashpad_handler.exe" CACHE FILEPATH "Crashpad handler executable" FORCE)
|
||
elseif(${child} MATCHES "hwinfo")
|
||
SET(${child}_target_link
|
||
"$<$<CONFIG:Debug>:fmtd>$<$<NOT:$<CONFIG:Debug>>:fmt>"
|
||
"$<$<CONFIG:Debug>:hwinfo_battery_d>$<$<NOT:$<CONFIG:Debug>>:hwinfo_battery>"
|
||
"$<$<CONFIG:Debug>:hwinfo_cpu_d>$<$<NOT:$<CONFIG:Debug>>:hwinfo_cpu>"
|
||
"$<$<CONFIG:Debug>:hwinfo_disk_d>$<$<NOT:$<CONFIG:Debug>>:hwinfo_disk>"
|
||
"$<$<CONFIG:Debug>:hwinfo_gpu_d>$<$<NOT:$<CONFIG:Debug>>:hwinfo_gpu>"
|
||
"$<$<CONFIG:Debug>:hwinfo_mainboard_d>$<$<NOT:$<CONFIG:Debug>>:hwinfo_mainboard>"
|
||
"$<$<CONFIG:Debug>:hwinfo_network_d>$<$<NOT:$<CONFIG:Debug>>:hwinfo_network>"
|
||
"$<$<CONFIG:Debug>:hwinfo_os_d>$<$<NOT:$<CONFIG:Debug>>:hwinfo_os>"
|
||
"$<$<CONFIG:Debug>:hwinfo_ram_d>$<$<NOT:$<CONFIG:Debug>>:hwinfo_ram>")
|
||
elseif(${child} MATCHES "openSSL")
|
||
SET(${child}_target_link
|
||
"$<$<CONFIG:Debug>:libcryptod>$<$<NOT:$<CONFIG:Debug>>:libcrypto>"
|
||
"$<$<CONFIG:Debug>:libssld>$<$<NOT:$<CONFIG:Debug>>:libssl>")
|
||
elseif(${child} MATCHES "cotp")
|
||
SET( ${child}_target_link
|
||
"$<$<CONFIG:Debug>:cotpd>$<$<NOT:$<CONFIG:Debug>>:cotp>" )
|
||
else()
|
||
SET( ${child}_target_link "" )
|
||
endif()
|
||
message(${child}_target_link: ${${child}_target_link})
|
||
endforeach()
|
||
|
||
set(Qt5_DIR ${ENVPATH}/qt5/lib/cmake/Qt5)
|
||
set(QT_DIR ${Qt5_DIR})
|
||
set(qtlist "Core" "Widgets" "Network" "Gui" "Charts" "PrintSupport" "Concurrent" "SerialPort" "Sql" )
|
||
message("QT_Version :" Qt${QT_VERSION_MAJOR})
|
||
|
||
add_definitions(-DQT_MESSAGELOGCONTEXT)#打开QT日志信息
|
||
endif()
|
||
##################
|
||
# 设置dll后缀
|
||
##
|
||
# 公共 include 目录以 target 的形式向各模块传播;BEFORE 路径用于兼容旧代码中的同名头文件优先级。
|
||
option(EUI_USE_PREBUILT_LIBS "Link prebuilt eui_tools, eui_crypto and eui_frameworkSdk libraries" ON)
|
||
|
||
if(EUI_HANDLE_AI_2256 AND EUI_USE_PREBUILT_LIBS)
|
||
message(FATAL_ERROR
|
||
"EUI_HANDLE_AI_2256 requires EUI_USE_PREBUILT_LIBS=OFF, or matching 2256-built eui_tools/eui_frameworkSdk libraries.")
|
||
endif()
|
||
|
||
if(EUI_USE_PREBUILT_LIBS)
|
||
find_package(Qt5 COMPONENTS Core Widgets Network SerialPort Sql REQUIRED)
|
||
|
||
foreach(prebuilt_target eui_tools eui_crypto eui_frameworkSdk)
|
||
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/lib/${prebuilt_target}.lib"
|
||
OR NOT EXISTS "${CMAKE_SOURCE_DIR}/lib/${prebuilt_target}_d.lib")
|
||
message(FATAL_ERROR
|
||
"EUI_USE_PREBUILT_LIBS=ON requires ${prebuilt_target}.lib and ${prebuilt_target}_d.lib in ${CMAKE_SOURCE_DIR}/lib")
|
||
endif()
|
||
|
||
add_library(${prebuilt_target} STATIC IMPORTED GLOBAL)
|
||
set_target_properties(${prebuilt_target} PROPERTIES
|
||
IMPORTED_LOCATION_DEBUG "${CMAKE_SOURCE_DIR}/lib/${prebuilt_target}_d.lib"
|
||
IMPORTED_LOCATION_RELEASE "${CMAKE_SOURCE_DIR}/lib/${prebuilt_target}.lib"
|
||
IMPORTED_LOCATION_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/lib/${prebuilt_target}.lib"
|
||
IMPORTED_LOCATION_MINSIZEREL "${CMAKE_SOURCE_DIR}/lib/${prebuilt_target}.lib"
|
||
)
|
||
endforeach()
|
||
|
||
add_library(eui::tools ALIAS eui_tools)
|
||
target_include_directories(eui_tools INTERFACE
|
||
"${CMAKE_SOURCE_DIR}/include"
|
||
${openSSL_include}
|
||
${opencv_include}
|
||
${halcon_include}
|
||
${handdleAI_include}
|
||
)
|
||
target_link_directories(eui_tools INTERFACE
|
||
${openSSL_lib}
|
||
${opencv_lib}
|
||
${halcon_lib}
|
||
${handdleAI_lib}
|
||
)
|
||
target_link_libraries(eui_tools INTERFACE
|
||
Qt5::Core
|
||
Qt5::Widgets
|
||
Qt5::SerialPort
|
||
Qt5::Network
|
||
Qt5::Sql
|
||
setupapi
|
||
cfgmgr32
|
||
${openSSL_target_link}
|
||
${opencv_target_link}
|
||
${halcon_target_link}
|
||
${handdleAI_target_link}
|
||
)
|
||
|
||
target_link_directories(eui_crypto INTERFACE ${cotp_lib})
|
||
target_link_libraries(eui_crypto INTERFACE ${cotp_target_link})
|
||
target_link_libraries(eui_tools INTERFACE eui_crypto)
|
||
|
||
add_library(eui::eui_frameworkSdk ALIAS eui_frameworkSdk)
|
||
target_include_directories(eui_frameworkSdk INTERFACE
|
||
"${CMAKE_SOURCE_DIR}/include"
|
||
${opencv_include}
|
||
${halcon_include}
|
||
${openSSL_include}
|
||
${handdleAI_include}
|
||
${mvs_include}
|
||
)
|
||
target_link_directories(eui_frameworkSdk INTERFACE ${opencv_lib} ${halcon_lib})
|
||
target_link_libraries(eui_frameworkSdk INTERFACE
|
||
eui::tools
|
||
Qt5::Core
|
||
${opencv_target_link}
|
||
${halcon_target_link}
|
||
)
|
||
else()
|
||
if(EXISTS "${CMAKE_SOURCE_DIR}/src/eui_crypto/CMakeLists.txt")
|
||
add_subdirectory(src/eui_crypto)
|
||
else()
|
||
add_library(eui_crypto STATIC IMPORTED GLOBAL)
|
||
set_target_properties(eui_crypto PROPERTIES
|
||
IMPORTED_LOCATION_DEBUG "${CMAKE_SOURCE_DIR}/lib/eui_crypto_d.lib"
|
||
IMPORTED_LOCATION_RELEASE "${CMAKE_SOURCE_DIR}/lib/eui_crypto.lib"
|
||
IMPORTED_LOCATION_RELWITHDEBINFO "${CMAKE_SOURCE_DIR}/lib/eui_crypto.lib"
|
||
IMPORTED_LOCATION_MINSIZEREL "${CMAKE_SOURCE_DIR}/lib/eui_crypto.lib"
|
||
INTERFACE_LINK_DIRECTORIES "${cotp_lib}"
|
||
)
|
||
target_link_libraries(eui_crypto INTERFACE ${cotp_target_link})
|
||
endif()
|
||
add_subdirectory(src/eui_tools)
|
||
endif()
|
||
|
||
add_subdirectory(src/eui_singleton)
|
||
include_directories(BEFORE
|
||
${CMAKE_SOURCE_DIR}/include
|
||
${CMAKE_SOURCE_DIR}/include/eui_singleton
|
||
${CMAKE_SOURCE_DIR}/include/missionCommon
|
||
${CMAKE_SOURCE_DIR}/src/eui_core
|
||
${CMAKE_SOURCE_DIR}/src/eui_core/services
|
||
${CMAKE_SOURCE_DIR}/src/eui_core/detRuntime
|
||
)
|
||
# 公共头 include/eui_tools/json/euiJson.h 是全局可包含的,却直接 #include <openssl/evp.h>;
|
||
# 任何传递包含它的 target(含未在自身 DLL_NAMES 里列 openSSL 的旧 mission)都需要该路径,
|
||
# 故 openSSL include 也随全局公共头一并向所有 target 传播。
|
||
include_directories(BEFORE ${openSSL_include})
|
||
|
||
# 包含子项目。
|
||
##################
|
||
# Automated examples
|
||
##
|
||
add_subdirectory(src)
|
||
if(EUI_BUILD_SUBMODULES)
|
||
add_subdirectory(subModule)
|
||
endif()
|
||
if(EUI_BUILD_RPCMODULES)
|
||
add_subdirectory(rpcModule)
|
||
endif()
|
||
if(BUILD_UNIT_TESTS)
|
||
enable_testing()
|
||
if(NOT EXISTS "${EUI_UNIT_TEST_DIR}/CMakeLists.txt")
|
||
message(FATAL_ERROR "Unit test source directory not found: ${EUI_UNIT_TEST_DIR}")
|
||
endif()
|
||
set(EUI_SOURCE_DIR "${CMAKE_SOURCE_DIR}")
|
||
add_subdirectory("${EUI_UNIT_TEST_DIR}" "${CMAKE_BINARY_DIR}/unitTest")
|
||
endif()
|
||
# add_subdirectory(plugin)
|
||
|
||
|
||
|
||
|
||
##################
|
||
# Automated modules
|
||
##
|
||
|
||
string(TIMESTAMP RUN_TIME)
|
||
message(" project end : ${RUN_TIME} TYPE:${CMAKE_BUILD_TYPE}")
|