[cmake-developers] cmake automoc breaks kde

Alexander Neundorf neundorf at kde.org
Sun Nov 6 12:42:42 EST 2011


On Wednesday 02 November 2011, Stephen Kelly wrote:
> On 11/02/2011 06:32 PM, David Faure wrote:
> >> >  #include "foo.moc"
> >> >  #include "moc_foo.cpp"
> >> >  
> >> >  This would have generated twice the same moc file, I think. IMO this
> >> >  is really confusing.
> > 
> > Well there is no reason to include both, unless you have Q_OBJECT in the
> > .cpp file too:-)
> 
> I'm sure I've seen this in several places in Qt code. Grepping I found
> one in
> 
> qt48/src/scripttools/debugging/qscriptenginedebugger.cpp
> 
> ....
> QT_END_NAMESPACE
> 
> #include "qscriptenginedebugger.moc"
> 
> #include "moc_qscriptenginedebugger.cpp"


I had a look now too.
Why do they include both files here ?
Using qmake, the qscriptenginedebugger.moc is as far as I can see, for the moc 
from the cpp file, while moc_qscriptenginedebugger.cpp is for the moc from the 
header.
Now, why is the moc_...cpp actually #included at all ?
Isn't it enough to list the header in the qmake file, and it will be moced ?

Also, in qmake/options.cpp I see the follow code:

    Option::cpp_moc_mod = "";
    Option::h_moc_mod = "moc_";
    ...
    Option::cpp_moc_ext = ".moc";
    Option::h_moc_ext = ".cpp";

which seems to say that the moc file for foo.cpp will be foo.moc, while the 
moc file for foo.h will be moc_foo.cpp (so it can be built as a standalone cpp 
file).


Alex



More information about the cmake-developers mailing list