[Development] Announcing moc_combine

Thiago Macieira thiago.macieira at intel.com
Mon May 30 19:43:32 CEST 2016


On segunda-feira, 30 de maio de 2016 17:53:48 BRT Marc Mutz wrote:
> This is orthogonal.
> 
> Obviously, I have nothing against running moc only once per
> library/executable, and applying optimisations such as string and sub-string
> sharing across classes. I also have nothing against a single output file
> for the tables. On the contrary. I applaud such changes.
> 
> But I don't want QObject subclass member functions compiled into separate
> TUs anymore, for the reasons cited.
> 
> So this would meet everyones requirements: a single moc run on all headers
> (and cpps) of a library, generating one output file with one large data
> table, and one file per class (or file), to be included in the class' .cpp
> file.

Except one requirement: the buildsytem. Each build target must produce exactly 
one output file. Anything else is not representable.

$ gmake -f /dev/stdin foo bar <<<'foo bar: ; true' 
true
true

I also don't like that the string tables and other details would be extern 
symbols. Right now, they are static. For Qt code, we do have -
fvisibility=hidden, but that's not required for users' code (though we could 
force Q_DECL_HIDDEN).

> This would even preserve Q_PRIVATE_SLOT, leading to less churn (unless that
> transition is desireable for other reasons than "doesn't work with
> moc_combine").

It's desireable in most cases, but it's not always easy.

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center




More information about the Development mailing list