diff options
| author | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-19 22:25:47 +0100 |
|---|---|---|
| committer | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-19 22:25:47 +0100 |
| commit | 5fe029fd127dd70079a01eb6dfbd347954bba9de (patch) | |
| tree | 0624b94a4fe09aafc6debdac1cd23797200c9992 | |
| parent | af758b3060e385f7fc204258f95c14379c2d6982 (diff) | |
| download | BobinkQtOpcUa-5fe029fd127dd70079a01eb6dfbd347954bba9de.tar.gz BobinkQtOpcUa-5fe029fd127dd70079a01eb6dfbd347954bba9de.zip | |
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.
| -rw-r--r-- | CMakeLists.txt | 9 | ||||
| -rw-r--r-- | cmake/BuildDeps.cmake | 20 | ||||
| -rw-r--r-- | 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") |
