[Interest] Three-file modules vs. moc
Tony Rietwyk
tony at rightsoft.com.au
Thu Aug 27 15:43:31 CEST 2020
Hi Bernhard,
I use plain .pro and .pri files with qmake to Visual Studio projects.
Moc has a feature that prevents the output files being treated as
separate compiles - if it finds the include in the relevant module
.cpp. It works really well for us with thousands of modules. I not
sure how that work flow translates to Qt Creator.
If you add
#include <moc_spinbox.cpp>
as the second line in spinbox.cpp, and then run qmake or whatever the
Creator equivalent is. After that, the moc steps will run as normal,
and then the compile of spinbox.cpp without a separate compile for
moc_spinbox.cpp.
Hope that helps,
Tony
On 27/08/2020 5:40 am, Bernhard Lindner wrote:
> 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.
> 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).
>
> 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?
>
More information about the Interest
mailing list