aboutsummaryrefslogtreecommitdiffstats
path: root/CMakeLists.txt
blob: 0be515b9bcfabb569bb75d25002ff40cf4e02ad4 (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
48
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 <Package>_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
  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()