On Mon, Dec 7, 2009 at 11:54 PM, Glenn Hughes <ghughes02...@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)
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to