[CMake] Forcibly run 'moc' on Qt files that are NOT part of the build

Michael Jackson mike.jackson at bluequartz.net
Wed Mar 7 10:52:37 EST 2012


On Mar 7, 2012, at 10:50 AM, Michael Hertling 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?
> 
> AFAIK, the QT4_WRAP_CPP() macro is essentially a wrapper around ADD_
> CUSTOM_COMMAND() which accumulates the latter's OUTPUT files in the
> former's first parameter. Thus, you might try
> 
> QT4_WRAP_CPP(not2compile ...)
> ADD_CUSTOM_TARGET(mocem DEPENDS ${not2compile})
> ADD_DEPENDENCIES(... mocem)
> 
> but I haven't tested this.
> 
> Regards,
> 
> Michael
> --

I would have to say that I didn't dig into the QT4_WRAP_CPP macro at all. If I had I would have probably answered my own question. I will give you idea a shot and report back if it works or not. Thanks for the idea.

--
Mike J.


More information about the CMake mailing list