[CMake] Qt4 moc and uic macros

Patrick Noffke Patrick.Noffke at adpro.com.au
Thu Jun 8 21:15:19 EDT 2006


> Do you have problems using QT4_WRAP_CPP() ? If so, I'd 
> suggest to fix them instead of adding yet another moc macro.
> 

I didn't realize QT4_WRAP_CPP was a moc macro.  It seems to work as well as the macro I gave.  Thanks.

> > 
> > The QT4_AUTOUIC macro allows you to automatically run uic 
> on .ui files and
> > creates a dependency of the ui_xxxx.h by xxxx.cpp (since this is the
> > file that #include's ui_xxxx.h).  An example usage would be 
> as follows:
> 
> In which way does this differ from the QT4_WRAP_UI() macro 
> coming with cmake 2.4.2 ? It should do the same. Doesn't it 
> work for you ?
> 
> Do you have problems with the include dirs ?
> Then try adding CMAKE_CURRENT_SOURCE_DIR and 
> CMAKE_CURRENT_BINARY_DIR to the include dirs. (you can do 
> this also using SET(CMAKE_INCLUDE_CURRENT_DIR ON) )

On Windows, it's not generating a rule to generate the ui_xxx.h files, unless I add a dependency to the xxx.cpp file by the ui_xxx.h file.

I started over with the QT4_WRAP_UI macro, and this is what works for me:

MACRO (QT4_WRAP_UI2 outfiles )

    FOREACH (it ${ARGN})
      GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
      GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
      SET(source ${outfile}.cpp)
      SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
      ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
        COMMAND ${QT_UIC_EXECUTABLE}
        ARGS -o ${outfile} ${infile}
#        DEPENDS ${infile}
        MAIN_DEPENDENCY ${infile})
      SET(${outfiles} ${${outfiles}} ${outfile})
      ADD_FILE_DEPENDENCIES(${source} ${outfile})
    ENDFOREACH (it)

ENDMACRO (QT4_WRAP_UI2)


The only changes are the SET(source ${outfile}.cpp) and ADD_FILE_DEPENDENCIES(${source} ${outfile}) lines.  (I tried the DEPENDS line, but that didn't work.)  Without the ADD_FILE_DEPENDENCIES line, it doesn't produce the rules  to build the ui_xxx.h files (for VS 2005 Express Edition).  However, not everyone uses the cpp extension, so this solution is not ideal.  If noone has a better suggestion, then I should be able to call QT4_WRAP_UI, then iterate over the outfiles and ADD_FILE_DEPENDENCY for each xxx.cpp file to the corresponding ui_xxx.h file.  That seems messy though.

Any other suggestions?

Regards,
Patrick


More information about the CMake mailing list