diff options
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..b464cce --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,47 @@ +cmake_minimum_required(VERSION 3.16) +project(BobinkQtOpcUaAppTemplate LANGUAGES CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# ── Qt setup (must come before BobinkQtOpcUa so AUTOMOC is enabled) ─────── +find_package(Qt6 6.10.2 REQUIRED COMPONENTS Quick) +qt_standard_project_setup(REQUIRES 6.10.2) + +# ── BobinkQtOpcUa ────────────────────────────────────────────────────────── +# Builds open62541 and QtOpcUa from submodules automatically on first +# configure. Subsequent configures skip the dep builds (delete +# build/deps/*-install/ to force a rebuild). +# +# Prerequisites: Qt 6.10.2+ with qt-cmake in PATH, OpenSSL dev headers, +# Ninja, and initialized submodules: +# git submodule update --init --recursive +add_subdirectory(deps/BobinkQtOpcUa) + +qt_add_executable(BobinkQtOpcUaAppTemplate main.cpp) +qt_add_qml_module(BobinkQtOpcUaAppTemplate URI BobinkQtOpcUaAppTemplate VERSION 1.0 QML_FILES Main.qml NodePage.qml) + +# Executable goes to bin/ to avoid clashing with the QML module directory +set_target_properties(BobinkQtOpcUaAppTemplate PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") + +# Link against BobinkQtOpcUaplugin (not BobinkQtOpcUa). The "plugin" +# target includes the QML type registration needed for `import Bobink`. +target_link_libraries(BobinkQtOpcUaAppTemplate PRIVATE Qt6::Quick BobinkQtOpcUaplugin) + +# ── Runtime quirks ────────────────────────────────────────────────────────── +# BobinkQtOpcUa builds open62541 as a shared library. The QtOpcUa backend +# plugin (loaded at runtime via dlopen) needs to find it. These two lines +# make that work during development: + +# 1. RPATH: embed the dep lib dirs so the dynamic linker finds libopen62541 +# and libQt6OpcUa at runtime without installing them system-wide. +set(CMAKE_BUILD_RPATH "${QTOPCUA_INSTALL_DIR}/lib" + "${OPEN62541_INSTALL_DIR}/lib") + +# 2. Plugin path: Qt's plugin loader doesn't know about our locally-built +# QtOpcUa backend. Pass the path as a compile definition and call +# QCoreApplication::addLibraryPath(QTOPCUA_PLUGIN_PATH) in main.cpp +# *before* creating the QGuiApplication. +target_compile_definitions(BobinkQtOpcUaAppTemplate PRIVATE + QTOPCUA_PLUGIN_PATH="${QTOPCUA_INSTALL_DIR}/plugins") |
