On 07.03.12 10:10:27, Michael Jackson wrote:
> In an effort to speed up the build of a project that uses Qt (and moc) I
> tried an alternate approach with the moc files. Normally I use the basic idea
> of gathering the headers that need to be "moc'ed" and feed those to moc with
> this type of CMake Code:
>
> QT4_WRAP_CPP( FilterWidgets_Generated_MOC_SRCS ${QFilterWidget_HDRS}
> ${FilterWidget_GEN_HDRS})
>
> The in the Add_Executable(...) call include the
> ${FilterWidgets_Generated_MOC_SRCS} variable to the list of sources. In my
> project I have at least 30 auto-generated files which all get moc'ed. That
> gives me an additional 60 compiled files. So I tried the idea of #include
> "moc_[some_file.cxx]" in each of the auto-generated .cpp files for each
> Widget. This would cut the number of files compiled in half. The issue is
> that since they are being #include'ed in the .cpp files then they do NOT need
> to be compiled themselves so I took the ${FilterWidgets_Generated_MOC_SRCS}
> out of the list of sources in the add_executable() call. What happened is
> that CMake did NOT run moc on those headers because there were now NOT
> included in the build.
>
> So for that version of the cmake code I have something like this:
>
> QT4_WRAP_CPP( FilterWidgets_Generated_MOC_SRCS ${FilterWidget_GEN_HDRS})
> QT4_WRAP_CPP( FilterWidgets_MOC_SRCS ${QFilterWidget_HDRS} )
>
> Is there a way to forcibly run the moc step even if the resulting source
> files are NOT directly included in the add_executable? Custom_Command?
> Add_Depends?
A few options I can think of:
- Use the automoc developed as part of KDE (its pure-Qt though)
https://projects.kde.org/projects/kdesupport/automoc/repository
- Use the automoc function from FindQt4.cmake
- Use the new automoc function in CMake 2.8.7
All of these will help handle the qt4_wrap_cpp stuff for you as long as
you have the #include. Note that I think there's at least 2 or 3
differnet filenames for the include depending on which of the above you
use (foo.moc vs moc_foo.cpp vs. moc_foo.cxx or something like that).
If none of them is an option for you then I guess using
add_custom_target and add_dependencies is the way to go.
Andreas
--
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