[Interest] creating QML module in a subdirectory of backing target

James DeLisle james.delisle at qt.io
Wed Aug 14 15:43:39 CEST 2024


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 <interest-bounces at qt-project.org> on behalf of Stefan Seefeld <stefan at seefeld.name>
Date: Wednesday, August 14, 2024 at 08:29
To: interestqt-project.org <interest at qt-project.org>
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...
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20240814/dfd09cd4/attachment.htm>


More information about the Interest mailing list