CMake dependency scanning for .moc files
Matthias Kretz
kretz at kde.org
Wed Apr 16 21:58:59 CEST 2008
On Wednesday 16 April 2008, Alexander Neundorf wrote:
> On Wednesday 16 April 2008, Andreas Pakulat wrote:
> > On 15.04.08 19:19:45, Alexander Neundorf wrote:
> > > On Monday 14 April 2008, Andreas Pakulat wrote:
> > > > Hi,
> > > >
> > > > so today I found that there are actually problems with cmake 2.6 and
> > > > dependency scanning.
> > > >
> > > > a) after changing an installed header the .moc files for headers that
> > > > include the updated header are not re-generated which might cause
> > > > problems when you do ABI changes (like removing a method) on the
> > > > installed header (linking errors)
> > > >
> > > > b) removing a .moc file from the builddir doesn't produce a re-moc,
> > > > cmake just tells gcc to compile the non-existing .moc-file.
> > > >
> > > > I'm actually not sure wether either of the two ever worked, but IMHO
> > > > at least the second one should work.
> > > >
> > > > This is was tested on CMake 2.6 and 2.4.7.
> > >
> > > And it works with 2.4.7 but doesn't with 2.6 ?
> >
> > It doesn't work with either of the two.
>
> Ok, so it's at least no cmake 2.6 problem, but automoc.
>
> > > This is a moc file handled via automoc, right ?
> >
> > Yes. The only way to get cmake to re-generate the .moc file is to touch
> > the header from which its generated or remove the subdir in the builddir
> > that contains the .moc file.
In the resulting Makefiles there are no dependencies on the actual moc files.
The upside of this is that changing a moc-include doesn't need a cmake rerun
(that includes adding Q_OBJECT to a class - before kde4automoc you had to
rerun cmake then). Even if the Makefile doesn't have a dep on the moc files,
if kde4automoc is run it will compare the timestamps of the moc file against
it's source file (header or cpp), that's why touching the .h file works.
IIUC you want to look at the timestamps of all the headers that are directly
or indirectly included from the file that is moced. AFAIK not even cmake
generated Makefiles do that for compilation (I imagine that would be rather
expensive information). If they do I'd like to know how to get at that
dependency info to reuse it for kde4automoc.
But really, I think that if the installed headers change in a binary
incompatible way the only safe thing you can do is a make clean.
Conclusion: I think everything works as it should. At least from the problem
description above.
--
________________________________________________________
Matthias Kretz (Germany) <><
http://Vir.homelinux.org/
MatthiasKretz at gmx.net, kretz at kde.org,
Matthias.Kretz at urz.uni-heidelberg.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part.
Url : http://mail.kde.org/pipermail/kde-buildsystem/attachments/20080416/aece0d26/attachment.pgp
More information about the Kde-buildsystem
mailing list