From 5fe029fd127dd70079a01eb6dfbd347954bba9de Mon Sep 17 00:00:00 2001 From: Thomas Vanbesien Date: Thu, 19 Feb 2026 22:25:47 +0100 Subject: Install QtOpcUa to local prefix instead of system Qt directory Add QTOPCUA_INSTALL_DIR and CMAKE_INSTALL_PREFIX so QtOpcUa installs to build/deps/qtopcua-install/ rather than polluting ~/Qt/6.10.2/. Use QT_ADDITIONAL_PACKAGES_PREFIX_PATH so Qt's find_package resolves OpcUa from the local install. --- CMakeLists.txt | 9 +++++---- cmake/BuildDeps.cmake | 20 +++++++++++--------- demo/CMakeLists.txt | 2 +- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2607734..6a9265f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,9 +8,9 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Build external dependencies (open62541, qtopcua) if not already built include(cmake/BuildDeps.cmake) -# Local QtOpcUa must come before system Qt so find_package picks up our build -# instead of any system-installed QtOpcUa. -list(PREPEND CMAKE_PREFIX_PATH "${QTOPCUA_BUILD_DIR}") +# Tell Qt's find_package to also look in our local QtOpcUa install for +# components (Qt6Config.cmake only searches its own install dir by default). +list(PREPEND QT_ADDITIONAL_PACKAGES_PREFIX_PATH "${QTOPCUA_INSTALL_DIR}") list(PREPEND CMAKE_PREFIX_PATH "${OPEN62541_INSTALL_DIR}") find_package(Qt6 6.10.2 REQUIRED COMPONENTS Core Qml Quick OpcUa) @@ -27,7 +27,8 @@ set(QML_IMPORT_PATH # 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_BUILD_DIR}/lib" "${OPEN62541_INSTALL_DIR}/lib") +set(CMAKE_BUILD_RPATH "${QTOPCUA_INSTALL_DIR}/lib" + "${OPEN62541_INSTALL_DIR}/lib") add_subdirectory(src) add_subdirectory(demo) diff --git a/cmake/BuildDeps.cmake b/cmake/BuildDeps.cmake index d105419..1b8eae3 100644 --- a/cmake/BuildDeps.cmake +++ b/cmake/BuildDeps.cmake @@ -1,11 +1,11 @@ # ====================================== -# BuildDeps.cmake +# BuildDeps.cmake # -# Configure, build, and install open62541 and QtOpcUa from -# git submodules under deps/. +# Configure, build, and install open62541 and QtOpcUa from git submodules under +# deps/. # -# Skip detection: if the built .so already exists, the -# corresponding dep is skipped. Delete the file to rebuild. +# Skip detection: if the built .so already exists, the corresponding dep is +# skipped. Delete the file to rebuild. # ====================================== set(OPEN62541_SOURCE_DIR "${CMAKE_SOURCE_DIR}/deps/open62541") @@ -13,6 +13,7 @@ set(OPEN62541_BUILD_DIR "${CMAKE_BINARY_DIR}/deps/open62541-build") set(OPEN62541_INSTALL_DIR "${CMAKE_BINARY_DIR}/deps/open62541-install") set(QTOPCUA_SOURCE_DIR "${CMAKE_SOURCE_DIR}/deps/qtopcua") set(QTOPCUA_BUILD_DIR "${CMAKE_BINARY_DIR}/deps/qtopcua-build") +set(QTOPCUA_INSTALL_DIR "${CMAKE_BINARY_DIR}/deps/qtopcua-install") # Verify submodules are initialized if(NOT EXISTS "${OPEN62541_SOURCE_DIR}/CMakeLists.txt") @@ -29,7 +30,7 @@ if(NOT EXISTS "${QTOPCUA_SOURCE_DIR}/CMakeLists.txt") endif() # ====================================== -# open62541 +# open62541 # ====================================== if(NOT EXISTS "${OPEN62541_INSTALL_DIR}/lib/libopen62541.so") @@ -73,12 +74,12 @@ else() endif() # ====================================== -# QtOpcUa +# QtOpcUa # ====================================== find_program(QT_CMAKE_COMMAND bin/qt-cmake REQUIRED) -if(NOT EXISTS "${QTOPCUA_BUILD_DIR}/lib/libQt6OpcUa.so") +if(NOT EXISTS "${QTOPCUA_INSTALL_DIR}/lib/libQt6OpcUa.so") message(STATUS "Configuring qtopcua in ${QTOPCUA_BUILD_DIR}...") set(_cmd @@ -89,6 +90,7 @@ if(NOT EXISTS "${QTOPCUA_BUILD_DIR}/lib/libQt6OpcUa.so") "${QTOPCUA_BUILD_DIR}" -G Ninja + -DCMAKE_INSTALL_PREFIX=${QTOPCUA_INSTALL_DIR} # Use our locally-built open62541, not the bundled copy -DINPUT_open62541=system -DCMAKE_PREFIX_PATH=${OPEN62541_INSTALL_DIR}) @@ -106,7 +108,7 @@ if(NOT EXISTS "${QTOPCUA_BUILD_DIR}/lib/libQt6OpcUa.so") message(FATAL_ERROR "${_cmd_str} failed: ${_result}") endif() - message(STATUS "Installing qtopcua to ${QTOPCUA_BUILD_DIR}...") + message(STATUS "Installing qtopcua to ${QTOPCUA_INSTALL_DIR}...") set(_cmd ${CMAKE_COMMAND} --install "${QTOPCUA_BUILD_DIR}") execute_process(COMMAND ${_cmd} RESULT_VARIABLE _result) if(_result) diff --git a/demo/CMakeLists.txt b/demo/CMakeLists.txt index efdfc72..03c19d3 100644 --- a/demo/CMakeLists.txt +++ b/demo/CMakeLists.txt @@ -18,4 +18,4 @@ target_link_libraries(BobinkDemo PRIVATE Qt6::Quick BobinkQtOpcUaplugin) # Tell the demo where to find the locally-built OpcUa plugin at runtime target_compile_definitions( - BobinkDemo PRIVATE QTOPCUA_PLUGIN_PATH="${QTOPCUA_BUILD_DIR}/plugins") + BobinkDemo PRIVATE QTOPCUA_PLUGIN_PATH="${QTOPCUA_INSTALL_DIR}/plugins") -- cgit v1.2.3