[Interest] Three-file modules vs. moc
Kai Köhne
Kai.Koehne at qt.io
Thu Aug 27 08:38:16 CEST 2020
> -----Ursprüngliche Nachricht-----
> Von: Interest <interest-bounces at qt-project.org> Im Auftrag von Bernhard
> Lindner
> Gesendet: Mittwoch, 26. August 2020 21:41
> An: interest at qt-project.org
> Betreff: [Interest] Three-file modules vs. moc
>
> Hi!
>
> Currently I am facing a problem with a Qt Creator managed Qt 5 project.
>
> The projects consists of a lot of modules and implements a special but useful
> file concept. Each module has 3 files:
> module.hpp - Public types, macros and declarations
> module.inl - Template function definitions, constexpr and inline function
> definitions
> module.cpp - All other definitions
> module.cpp includes module.inl and module.inl includes module.hpp.
>
> I added all .hpp file names to the .pro file using Qt Creator. All moc relevant
> .hpp files are parsed fine by moc and a moc_module.cpp file is generated for
> each module as usual.
Have you tried adding the .inl files to HEADERS instead?
> Unfortunately the moc_module.cpp files includes module.hpp only, since
> module.inl are unknown to moc.
> So all function definitions from moc_module.inl are unknown during
> compilation of moc_module.cpp and I get undefined reference linker errors
> (e.g. for property related setters called in the moc_module.cpp code).
You can let moc add additional includes in it's output via -f<file> argument,
Custom options to moc can be set in qmake via QMAKE_MOC_OPTIONS.
> Maybe I could use a lot of Q_MOC_RUN preprocessor conditions to work
> around but that would pollute the code awfully.
>
> How can I solve this problem on the moc side? Is there a way to tell moc via
> the .pro project on a per-module basis to include module.inl instead of (or
> along with) module.inl in moc_module.cpp?
See above. Either let moc directly parse module.inl, instead of module.hpp.
Or let the generated moc file include module.inl by setting e.g.
QMAKE_MOC_OPTIONS=-fmodule.inl
Regards
Kai
More information about the Interest
mailing list