Qt, Qbs:moc_Filename.cpp automatisch generieren
Frage
Ich habe also eine mit Q_OBJECT markierte Klasse, die eine vorgenerierte .moc-Datei benötigt, um verwendbar zu sein.
In meiner .qbs-Datei habe ich eine CppApplication
Artikel;Dies scheint der falsche Projekttyp zu sein, da qbs nicht aufruft moc ClassName.cpp
um Mocs für mich zu generieren.Was sollte stattdessen verwendet/optimiert werden?
-
Ich wusste also von der Qt.core-Abhängigkeit, aber sie funktionierte bei meiner lahmgelegten Qt-Installation nicht;Als ich versuchte, das Problem zu beheben, kamen folgende Fakten ans Licht:
- Es war erforderlich, die Qt-Toolchain zu erkennen (
qbs-setup-qt
) und Ruf anqbs-config-ui
- Qbs speichert tatsächlich die Build-Regeln in core.qbs, verknüpft über die Qt/Core-Abhängigkeit.
- Es ist möglich, die Build-Regeln zu kopieren/in meine eigene .qbs-Datei einzufügen und externe Abhängigkeiten zu vermeiden;Ich betrachte dies als einen schmutzigen Hack zur Bereitstellung des Codes auf wirklich lahmgelegten Build-Systemen (jetzt habe ich ein Wort für die Qt-Unterstützung auf Gentoo).
Lösung
Ich denke, Ihnen fehlt möglicherweise die Abhängigkeit der Anwendung von den Qt-Modulen.Die Regel zur Generierung der Moc-Dateien ist Teil des Qt.core-Moduls.Sie können diese Abhängigkeit hinzufügen mit:
CppApplication {
name: "MyApp"
files: "path_to_source/**"
Depends { name: "Qt.core" } // Optional
Depends { name: "Qt.widgets" }
}
Da alle anderen Qt-Module eine implizite Abhängigkeit von Qt.core haben, könnte die explizite Abhängigkeit von Qt.core übersprungen werden, wenn eine Abhängigkeit von einem anderen Qt-Modul besteht (in diesem Beispiel Qt.widgets).
Weitere Details finden Sie unter http://doc.qt.io/qbs/qt-modules.html