[CMake] question about QT4_WRAP_CPP

Pau Garcia i Quiles pgquiles at elpauer.org
Mon Dec 7 18:08:02 EST 2009


On Mon, Dec 7, 2009 at 11:54 PM, Glenn Hughes <ghughes02138 at gmail.com> wrote:
> I'm still playing around with the states Qt example, and I've hit something
> I don't understand:
>
> I can get everything working as expected with QT4_AUTOMOC, but not if I use
> QT4_WRAP_CPP.
>
> In the QT4_WRAP_CPP case, it seems the only way to get dependencies set up
> correctly is to add the MOC output to the target, i.e.
>
> QT4_WRAP_CPP( states_MOC_files ${states_HEADERS})
> ADD_EXECUTABLE( states MACOSX_BUNDLE ${states_SRCS} ${states_MOC_files}
> ${states_RESOURCES_SOURCES} )
>
> However, if I do this CMake adds the moc files (named in the form
> moc_foo.cxx) to the project to be compiled as C++ files.
> BUT, MOC files are not designed to be compiled on their own. Typically they
> are included at the bottom of the module that contains the source for the
> objects in question. They do not include all the headers that they need, and
> so they will not build independently.
>
> So, if I include the moc files in the ADD_EXECUTABLE line, my build doesn't
> work...
> but if I remove them, the dependency is not set up, so the moc files are not
> generated at all.
>
> How can I say "these files are required by this target, but don't try to
> compile them directly?"
>
> Or is there something else I should be doing?

If you use QT4_WRAP_CPP, do not #include "blah.moc"

If you use QT4_AUTOMOC, #include "blah.moc"

QT4_AUTOMOC is more convenient but currently there's the bug I pointed
in my other e-mail: if the .h and the .cpp file for a class are in
different directories, QT4_AUTOMOC fails.

-- 
Pau Garcia i Quiles
http://www.elpauer.org
(Due to my workload, I may need 10 days to answer)


More information about the CMake mailing list