Hi Michael, May be you could have a look at [1], [2] and [3]. It basically illustrates how to moc a header a file and include at the end of cpp file.
Hth Jc [1] https://github.com/commontk/CTK/blob/master/Libs/Testing/CMake/ctkMacroGenerateMocs.cmake [2] https://github.com/commontk/CTK/blob/master/Libs/Widgets/Testing/Cpp/CMakeLists.txt#L120 [3] https://github.com/commontk/CTK/blob/master/Libs/Widgets/Testing/Cpp/ctkMessageBoxDontShowAgainTest.cpp#L530 On Wed, Mar 7, 2012 at 12:13 PM, Michael Jackson < [email protected]> wrote: > > On Mar 7, 2012, at 12:05 PM, Michael Wild wrote: > > > On 03/07/2012 04:10 PM, 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? > >> > >> Thanks > > > > You could still add them to the add_executable() call, but set their > > HEADER_FILE_ONLY source file property to TRUE to prevent them from being > > compiled. This way they would still show up in the proper place in > > IDE's, and no need for fiddling around with add_custom_target() and > > add_dependencies(). Of course, you might still want to introduce the > > custom target for convenience so you can trigger moc'ing manually (e.g. > > "make moc")... > > > > Michael > > > > -- > > > Thanks to everyone (Michael and Andreas) for the suggestions. Both > suggestions have their pros and cons. I am leaning towards the "Use the new > automoc function in CMake 2.8.7" that Andreas suggested. I don't have to > worry about the CMake version since there are only 2 developers. We can > upgrade to the latest CMake without a problem. > Actually NOT having them listed in the IDE is BETTER for me since I tread > those files as "black boxes", ie, I don't really want to know what is in > them. Or at least on a very rare occasion at which point I can just search > for the file in the build directory. > > Thanks again Everyone. I'll post in the next few days what I ended up > doing. > -- > Mike J. > -- > > 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 > -- +1 919 869 8849
-- 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
