Files
material_box_storage_detect…/image_capture/cmake/Dependencies.cmake
2026-01-06 10:49:45 +08:00

130 lines
4.5 KiB
CMake

# Qt6
if(NOT Qt6_DIR AND NOT ENV{Qt6_DIR} AND NOT CMAKE_PREFIX_PATH)
message(WARNING "Qt6 not found in environment. Please set CMAKE_PREFIX_PATH or Qt6_DIR.")
endif()
find_package(Qt6 REQUIRED COMPONENTS Widgets)
# OpenCV
if(DEFINED ENV{OpenCV_DIR})
set(OpenCV_DIR $ENV{OpenCV_DIR})
message(STATUS "Using OpenCV_DIR from environment: ${OpenCV_DIR}")
elseif(NOT OpenCV_DIR)
message(STATUS "OpenCV_DIR not set, trying to find OpenCV in standard locations...")
set(LEGACY_OPENCV_PATH "D:/enviroments/OPencv4.55/OPencv4.55_MSVC/opencv/build/x64/vc15/lib")
if(EXISTS ${LEGACY_OPENCV_PATH})
set(OpenCV_DIR ${LEGACY_OPENCV_PATH})
message(STATUS "Found legacy OpenCV path: ${OpenCV_DIR}")
endif()
endif()
find_package(OpenCV REQUIRED)
message(STATUS "OpenCV found: ${OpenCV_VERSION}")
message(STATUS "OpenCV libraries: ${OpenCV_LIBS}")
message(STATUS "OpenCV include dirs: ${OpenCV_INCLUDE_DIRS}")
# Open3D
# Open3D
if(DEFINED ENV{Open3D_DIR})
set(Open3D_DIR $ENV{Open3D_DIR})
message(STATUS "Using Open3D_DIR from environment: ${Open3D_DIR}")
elseif(NOT Open3D_DIR)
# Default to 0.18 Release
set(DEFAULT_OPEN3D_PATH "D:/enviroments/Open3d/open3d-devel-windows-amd64-0.18.0-release/CMake")
# Debug path: D:/enviroments/Open3d/open3d-devel-windows-amd64-0.18.0-debug/CMake
if(EXISTS ${DEFAULT_OPEN3D_PATH})
set(Open3D_DIR ${DEFAULT_OPEN3D_PATH})
message(STATUS "Using default Open3D path: ${Open3D_DIR}")
endif()
endif()
find_package(Open3D REQUIRED)
message(STATUS "Open3D found: ${Open3D_VERSION}")
message(STATUS "Open3D DIR: ${Open3D_DIR}")
# Find Open3D DLL and dependencies (TBB)
# Adjust ROOT calculation based on where Config is found.
get_filename_component(DIR_NAME "${Open3D_DIR}" NAME)
if("${DIR_NAME}" STREQUAL "CMake")
# Structure: root/CMake/Open3DConfig.cmake -> root is up one level
get_filename_component(Open3D_ROOT "${Open3D_DIR}/.." ABSOLUTE)
else()
# Assume standard install: root/lib/cmake/Open3D/Open3DConfig.cmake -> root is up 3 levels
get_filename_component(Open3D_ROOT "${Open3D_DIR}/../../.." ABSOLUTE)
endif()
set(Open3D_BIN_DIR "${Open3D_ROOT}/bin")
set(Open3D_RUNTIME_DLLS "")
find_file(Open3D_DLL NAMES Open3D.dll PATHS ${Open3D_BIN_DIR} NO_DEFAULT_PATH)
if(Open3D_DLL)
list(APPEND Open3D_RUNTIME_DLLS ${Open3D_DLL})
message(STATUS "Found Open3D DLL: ${Open3D_DLL}")
else()
message(WARNING "Open3D DLL not found in ${Open3D_BIN_DIR}. You might need to add it to your PATH manually.")
endif()
# Find TBB DLLs (tbb.dll or tbb12_debug.dll etc)
# We glob for tbb*.dll but filter based on build type to avoid mixing runtimes
file(GLOB TBB_ALL_DLLS "${Open3D_BIN_DIR}/tbb*.dll")
set(TBB_DLLS ${TBB_ALL_DLLS})
# Filter out debug DLLs (ending in _debug.dll or d.dll)
list(FILTER TBB_DLLS EXCLUDE REGEX ".*(_debug|d)\\.dll$")
if(NOT TBB_DLLS)
# If no release DLLs found, check if we only have debug ones
if(TBB_ALL_DLLS)
message(WARNING "Only Debug TBB DLLs found in ${Open3D_BIN_DIR}. Release build might crash due to ABI mismatch!")
# Fallback: copy everything (dangerous but better than nothing?)
set(TBB_DLLS ${TBB_ALL_DLLS})
else()
message(WARNING "No TBB DLLs found in ${Open3D_BIN_DIR}.")
endif()
endif()
if(TBB_DLLS)
list(APPEND Open3D_RUNTIME_DLLS ${TBB_DLLS})
message(STATUS "Found TBB DLLs: ${TBB_DLLS}")
endif()
# Halcon
# Force usage of the user known path if possible, or fallback to environment
set(USER_PROVIDED_HALCON_ROOT "C:/Users/cve/AppData/Local/Programs/MVTec/HALCON-23.11-Progress")
if(EXISTS "${USER_PROVIDED_HALCON_ROOT}")
set(HALCON_ROOT "${USER_PROVIDED_HALCON_ROOT}")
message(STATUS "Using user provided HALCON_ROOT: ${HALCON_ROOT}")
elseif(DEFINED ENV{HALCONROOT})
set(HALCON_ROOT $ENV{HALCONROOT})
file(TO_CMAKE_PATH "${HALCON_ROOT}" HALCON_ROOT)
message(STATUS "Using HALCON_ROOT from environment: ${HALCON_ROOT}")
else()
message(WARNING "HALCONROOT not found.")
endif()
if(HALCON_ROOT)
set(HALCON_INCLUDE_DIRS
"${HALCON_ROOT}/include"
"${HALCON_ROOT}/include/halconcpp"
)
if(WIN32)
set(HALCON_LIB_DIR "${HALCON_ROOT}/lib/x64-win64")
if(NOT EXISTS "${HALCON_LIB_DIR}")
set(HALCON_LIB_DIR "${HALCON_ROOT}/lib")
endif()
set(HALCON_LIBRARIES
"${HALCON_LIB_DIR}/halcon.lib"
"${HALCON_LIB_DIR}/halconcpp.lib"
)
endif()
message(STATUS "Halcon include: ${HALCON_INCLUDE_DIRS}")
message(STATUS "Halcon libs: ${HALCON_LIBRARIES}")
endif()