blob: b464cce3c8c62f840bab6930baa87ed575de1977 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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")
|