Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Qt5 + cmake = SLOW moc.exe



  • I'am experiencing some abysmal compilation time when it comes to building a relatively small Qt5 app in windows.

    The problem resembles alot the reported here issue : http://lists.qt-project.org/pipermail/interest/2015-January/014812.html

    In case one uses cmake+qt5 to build on windows and have additional projects (in my case VTK/ITK/Boost)
    moc.exe will go first over all visible to cmake paths, some windows ones, then finally in C:/Qt to find its headers.
    So for generating one cpp file from moc.exe I end up with a few million IO operations! ine can use procmon.exe to inspect moc.exe on windows.
    Rebuilding from scratch takes ages compared to what takes <5min before switching to Qt :((((

    MOC cannot go in parallel (pre-processor!!!)

    at that point I'm faced with a few options to explore, however I expect something of official HOW-TO on cmake+qt integration.

    It might be a Qt5 or/and Cmake issue, hard to tell, since I'm not expert in either.

    Can someone with more inside take a look please !?


  • Lifetime Qt Champion

    Hi,

    How many includes do you have in your header files ? Are some of them module includes like e.g. #include <QtWidgets> ?



  • one possible refactoring you could do to make your compilation fast is use forward declaration in all possible places.



  • What does your CMakeLists look like?
    I haven't experienced that sort of behaviour with Windows and Qt5.



  • I think I nailed it. It has to do with auto_moc(on) in cmake as well as the fact I do introduced big ass projects (ITk&VTK&BOOST) on board.
    Also I tried linux with gnu-makefiles and moc runs fast. So it is also specific to VS.
    Having one monolithic application (single cmake target) does not help either.
    I did split the project in a few static libs and it seems better already, though a clean rebuild still takes forever :(

    So the only solutions I can think of:
    Disable auto moc and do manual moc in cmake. People have reported some auto_moc problems before.
    Switch to dev in Linux. Right now it takes equal time to build all my dependencies and the project to just building the project under win :D

    Note: Not a Qt issue. I posted here cause my initial feeling was it was occurring only in Qt5 (Qt4 is affected too however). So might escalate on cmake mailing lists.


Log in to reply