cmake_minimum_required(VERSION 3.16) project(BobinkQtOpcUa LANGUAGES CXX) if(PROJECT_IS_TOP_LEVEL) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) endif() # Build external dependencies (open62541, qtopcua) if not already built include(cmake/BuildDeps.cmake) # Point CMake directly at the locally-built QtOpcUa packages. # Qt6Config.cmake uses NO_DEFAULT_PATH when searching for components, so # QT_ADDITIONAL_PACKAGES_PREFIX_PATH should work but is fragile in practice # (Qt Creator can interfere). Setting _DIR is always checked first. set(Qt6OpcUa_DIR "${QTOPCUA_INSTALL_DIR}/lib/cmake/Qt6OpcUa") set(Qt6OpcUaPrivate_DIR "${QTOPCUA_INSTALL_DIR}/lib/cmake/Qt6OpcUaPrivate") set(Qt6OpcUaTools_DIR "${QTOPCUA_INSTALL_DIR}/lib/cmake/Qt6OpcUaTools") set(Qt6DeclarativeOpcua_DIR "${QTOPCUA_INSTALL_DIR}/lib/cmake/Qt6DeclarativeOpcua") list(PREPEND CMAKE_PREFIX_PATH "${OPEN62541_INSTALL_DIR}") find_package(Qt6 6.10.2 REQUIRED COMPONENTS Core Qml Quick OpcUa) if(PROJECT_IS_TOP_LEVEL) qt_standard_project_setup(REQUIRES 6.10.2) # Set path for qmllint set(QML_IMPORT_PATH "${CMAKE_CURRENT_BINARY_DIR}/qml" CACHE STRING "Path to locally built qml") # Generate .qmlls.ini for QML Language Server. Useful once QtOpcUa is installed # globally (qt-cmake --install build/deps/qtopcua-build) so qmlls can resolve # all Qt QML imports without extra importPaths. set(QT_QML_GENERATE_QMLLS_INI ON # CACHE BOOL "") # Ensure the local QtOpcUa and open62541 libs are findable at runtime (needed # because the Qt plugin loader dlopen's the open62541 backend). set(CMAKE_BUILD_RPATH "${QTOPCUA_INSTALL_DIR}/lib" "${OPEN62541_INSTALL_DIR}/lib") endif() add_subdirectory(src) if(PROJECT_IS_TOP_LEVEL) add_subdirectory(demo) endif()