Why is jom called with "qmake all", and what does it mean?



  • I am trying to find out why my autodetected MSVC 2015 kit for Qt 5.9.4 fails miserably in Qt Creator.
    I am using the kit as it was autodetected. Here is the output of an attempt to build a project that builds without any problem on my MinGW kit:

    10:08:14: Running steps for project lpad_widgets...
    10:08:14: Starting: "C:\Qt\5.9.4\msvc2015\bin\qmake.exe" C:\sources\svcs\ent\lpad\frei\widgets\lpad_widgets.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"
    10:08:14: The process "C:\Qt\5.9.4\msvc2015\bin\qmake.exe" exited normally.
    10:08:14: Starting: "C:\Qt\Tools\QtCreator\bin\jom.exe" qmake_all
    Usage: jom @commandfile
           jom [options] [/f makefile] [macro definitions] [targets]
    
    nmake compatible options:
    /A build all targets
    /D display build information
    /E override environment variable macros
    /F <filename> use the specified makefile
    /G display included makefiles
    /H show help
    /I ignore all exit codes
    /K keep going - build unrelated targets on error
    /N dry run - just print commands
    /NOLOGO do not print logo
    /P print makefile info
    /R ignore predefined rules and macros
    /S silent mode
    /U print content of inline files
    /L same as /NOLOGO
    /W print the working directory before and after other processing
    /X <filename> write stderr to file.
    /Y disable batch mode inference rules
    
    jom only options:
    /DUMPGRAPH show the generated dependency graph
    /DUMPGRAPHDOT dump dependency graph in dot format
    /J <n> use up to n processes in parallel
    /KEEPTEMPFILES keep all temporary files
    /VERSION print version and exit
    Error: unknown command line option '"' in arguments: '/"--keep-going"', 'qmake_all'
    

    The only issue displayed with my kit is the lack of a debugger. It has the correct compiler and Qt version set up for sure.

    Note that I am fully able to build my project with a correctly configured command line and the commands

    qmake lpad_widgets.pro
    nmake
    

    Question:

    • Why is jom called, and not nmake?
    • What is the "qmake all" parameter, and where does it come from? I couldn't find it anywhere in my project or kit configuration.

  • Moderators

    @Asperamanca jom.exe is another build tool which can compile several files in parallel. This way the build is much faster if you have more than one core. Check your kit in QtCreator, there must be a checkbox to activate/deactivate jom.



  • @jsulm said in Why is jom called with "qmake all", and what does it mean?:

    @Asperamanca jom.exe is another build tool which can compile several files in parallel. This way the build is much faster if you have more than one core. Check your kit in QtCreator, there must be a checkbox to activate/deactivate jom.

    I don't see any options in any kit related to jom. If you find something, please give me a keyword to look for.


  • Moderators

    @Asperamanca Go to "Build & Run" on the "General" page at the bottom there is "Use jom instead of nmake" checkbox...



  • Thanks for that.
    Now nmake is called with the mysterious "qmake_all" option, which it doesn't know what do do about, either.

    Any ideas on that?


  • Moderators

    @Asperamanca Try to delete the build folder, run qmake and build


  • Qt Champions 2017

    @Asperamanca said in Why is jom called with "qmake all", and what does it mean?:

    qmake_all

    Without deeper knowing about this, this is just a target in your makefile that execute some steps.

    If your Makefile does not contains this target, then it is maybe created with another/older qmake version.

    Try cleaning the build folder (and maybe deleting the *.pro.user) to build again from a clean state.

    Regards

    Edit: @jsulm was faster :)



  • Indeed, my makefile includes the line:

    qmake_all: FORCE
    

    When I delete and regenerate the makefile, it's there again. No other files in my whole source tree contain the word "qmake_all", but it is contained within qmake.exe, so it seems to be some kind of hardcoded keyword.


  • Moderators

    @Asperamanca said in Why is jom called with "qmake all", and what does it mean?:

    qmake_all: FORCE

    If this is in your Makefile then it should work. This is what qmake puts into Makefile by default. What exact error do you get now with nmake?



  • 14:40:49: Running steps for project lpad_widgets...
    14:40:49: Starting: "C:\Qt\5.9.4\msvc2015\bin\qmake.exe" C:\sources\svcs\ent\lpad\frei\widgets\lpad_widgets.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"
    14:40:49: The process "C:\Qt\5.9.4\msvc2015\bin\qmake.exe" exited normally.
    14:40:49: Starting: "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\nmake.exe" qmake_all
    
    Microsoft (R) Program Maintenance Utility Version 14.00.24210.0
    Copyright (C) Microsoft Corporation.  All rights reserved.
    
    NMAKE : fatal error U1065: invalid option '"'
    Stop.
    14:40:49: The process "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\nmake.exe" exited with code 2.
    Error while building/deploying project lpad_widgets (kit: Desktop Qt 5.9.4 MSVC2015 32bit2)
    The kit Desktop Qt 5.9.4 MSVC2015 32bit2 has configuration issues which might be the root cause for this problem.
    When executing step "qmake"
    14:40:49: Elapsed time: 00:00.
    

    I start to suspect that Creator has issues with double quotes...


  • Moderators

    @Asperamanca said in Why is jom called with "qmake all", and what does it mean?:

    I am trying to find out why my autodetected MSVC 2015 kit for Qt 5.9.4 fails miserably in Qt Creator.

    First test: Use this kit to create a brand new project (such as a Qt Widgets Application) and build that without any modifications. Does that work? If not, then the problem is in your kit or Qt Creator. Otherwise, the problem is in your lpad_widgets project.

    @Asperamanca said in Why is jom called with "qmake all", and what does it mean?:

    Indeed, my makefile includes the line:
    qmake_all: FORCE

    This means when nmake or jom or mingw32-make is started with the qmake_all argument, it will run everything under the target called "FORCE". Note that many other lines have FORCE too, not just qmake_all.

    More info on how to FORCE is commonly used in Makefiles: https://www.gnu.org/software/make/manual/html_node/Force-Targets.html (Note: This is Section 4.7 in the document though, so you might need to read Sections 4.1- 4.6 to fully understand it)



  • Thanks for all your input. I dug my own grave here:

    As a temporary workaround for this issue, I started Creator via a batch file that sets some variables, and since that was my normal desktop link, I wasn't really aware of it anymore (I created that workaround years ago, long before the issue was posted).
    One of the variable was "--keep-going"...which of course MSVC doesn't understand...


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.