Hi Stefan,
Here’s what works for me in Qt 6.5+:
In A/CMakeLists.txt:
add_subdirectory(qml)
In A/qml/CMakeLists.txt:
qt_add_library(qml STATIC)
qt_add_qml_module(qml
URI qml
QML_FILES
…
)
target_link_libraries(qml
PRIVATE
Qt6::Quick
)
target_link_libraries(${CMAKE_PROJECT_NAME}
PRIVATE
qmlplugin
)
Instead of using add_library from the top-level CMakeLists.txt file, add the
subdirectory. In the subdirectory’s CMakeLists.txt file, add a static library,
add the qml module, then link the static library’s plugin to the application
binary. Hence, the last bit of linking to ‘qmlplugin’. The tooling generates
this in the build directory and it contains the necessary code to register the
QML types and load the static library.
Hope that helps,
James
From: Interest <[email protected]> on behalf of Stefan Seefeld
<[email protected]>
Date: Wednesday, August 14, 2024 at 08:29
To: interestqt-project.org <[email protected]>
Subject: [Interest] creating QML module in a subdirectory of backing target
hello,
in a large CMake / Qt project of mine, I'm building a (shared) library in some
directory `A`.
Now I want to add a QML module for that, but due to various constraints want to
do that in a subdirectory `A/qml`.
That is, I have
A/
├── CMakeLists.txt
├── qml
│ ├── CMakeLists.txt
where `A/CMakeLists.txt` calls `addLibrary(A ...)`, and `A/qml/CMakeLists.txt`
calls `qt_add_qml_module(A ...)`
This eventually bails with the error
```
... No rule to make target '.../A/A_qmltyperegistrations.cpp`, needed by
'CMakeFiles/A.dir/a_qmltyperegistrations.cpp.o'
```
If I merge the definition of `qml_add_qml_module` in the outer CMakeLists.txt
file, everything is compiling fine.
Am I missing something ? Is this is known limitation of the build logic ?
Thanks for any hints,
--
[Image removed by sender.]
...ich hab' noch einen Koffer in Berlin...
_______________________________________________
Interest mailing list
[email protected]
https://lists.qt-project.org/listinfo/interest