aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt46
-rw-r--r--cmake/BuildDeps.cmake16
-rw-r--r--demo/CMakeLists.txt2
-rw-r--r--src/CMakeLists.txt3
4 files changed, 39 insertions, 28 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f35b498..51b90e8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,9 +1,11 @@
cmake_minimum_required(VERSION 3.16)
project(BobinkQtOpcUa LANGUAGES CXX)
-set(CMAKE_CXX_STANDARD 17)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
-set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+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)
@@ -19,21 +21,27 @@ set(Qt6DeclarativeOpcua_DIR "${QTOPCUA_INSTALL_DIR}/lib/cmake/Qt6DeclarativeOpcu
list(PREPEND CMAKE_PREFIX_PATH "${OPEN62541_INSTALL_DIR}")
find_package(Qt6 6.10.2 REQUIRED COMPONENTS Core Qml Quick OpcUa)
-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. Useful once QtOpcUa is installed
-# globally (qt-cmake --install build/deps/qtopcua-build) so qmlls can resolve
-# all Qt QML imports without extra importPaths. 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")
+
+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. Useful once QtOpcUa is installed
+ # globally (qt-cmake --install build/deps/qtopcua-build) so qmlls can resolve
+ # all Qt QML imports without extra importPaths. 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)
-add_subdirectory(demo)
+
+if(PROJECT_IS_TOP_LEVEL)
+ add_subdirectory(demo)
+endif()
diff --git a/cmake/BuildDeps.cmake b/cmake/BuildDeps.cmake
index 8f819f3..83791a2 100644
--- a/cmake/BuildDeps.cmake
+++ b/cmake/BuildDeps.cmake
@@ -8,12 +8,14 @@
# skipped. Delete the file to rebuild.
# ======================================
-set(OPEN62541_SOURCE_DIR "${CMAKE_SOURCE_DIR}/deps/open62541")
-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")
+set(OPEN62541_SOURCE_DIR "${PROJECT_SOURCE_DIR}/deps/open62541")
+set(OPEN62541_BUILD_DIR "${PROJECT_BINARY_DIR}/deps/open62541-build")
+set(OPEN62541_INSTALL_DIR "${PROJECT_BINARY_DIR}/deps/open62541-install"
+ CACHE INTERNAL "open62541 install prefix")
+set(QTOPCUA_SOURCE_DIR "${PROJECT_SOURCE_DIR}/deps/qtopcua")
+set(QTOPCUA_BUILD_DIR "${PROJECT_BINARY_DIR}/deps/qtopcua-build")
+set(QTOPCUA_INSTALL_DIR "${PROJECT_BINARY_DIR}/deps/qtopcua-install"
+ CACHE INTERNAL "QtOpcUa install prefix")
# Verify submodules are initialized
if(NOT EXISTS "${OPEN62541_SOURCE_DIR}/CMakeLists.txt")
@@ -150,7 +152,7 @@ endif()
if(WIN32)
# On Windows DLLs must be next to the .exe (no RPATH). Copy them to bin/.
- file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
+ file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
file(GLOB _dep_dlls "${OPEN62541_INSTALL_DIR}/bin/*.dll"
"${QTOPCUA_INSTALL_DIR}/bin/*.dll")
foreach(_dll ${_dep_dlls})
diff --git a/demo/CMakeLists.txt b/demo/CMakeLists.txt
index 03c19d3..d2158cb 100644
--- a/demo/CMakeLists.txt
+++ b/demo/CMakeLists.txt
@@ -12,7 +12,7 @@ qt_add_qml_module(
# Executable goes to bin/ to avoid clashing with the QML module directory
set_target_properties(BobinkDemo PROPERTIES RUNTIME_OUTPUT_DIRECTORY
- "${CMAKE_BINARY_DIR}/bin")
+ "${PROJECT_BINARY_DIR}/bin")
target_link_libraries(BobinkDemo PRIVATE Qt6::Quick BobinkQtOpcUaplugin)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index b0781cd..0aff9d4 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -14,6 +14,7 @@ qt_add_qml_module(
OpcUaMonitoredNode.h
OpcUaMonitoredNode.cpp
OUTPUT_DIRECTORY
- "${CMAKE_BINARY_DIR}/qml/Bobink")
+ "${PROJECT_BINARY_DIR}/qml/Bobink")
+target_compile_features(BobinkQtOpcUa PUBLIC cxx_std_17)
target_link_libraries(BobinkQtOpcUa PUBLIC Qt6::Core Qt6::Quick Qt6::OpcUa)