QMake / jom force extra MIDL compiler to run before RC

287 views Asked by At

I'm converting an old OCX project to QMake (as it's getting the "new" standard in my company). In my Button.pro file, I add the MIDL compiler by the means of

idl_c.output = $${DESTDIR}/${QMAKE_FILE_BASE}.tlb
idl_c.input = IDL
idl_c.commands = $${QMAKE_IDL} ${QMAKE_FILE_IN} $${IDLFLAGS} \
                 /tlb ${QMAKE_FILE_OUT}
idl_c.variable_out = GENERATED_FILES
idl_c.CONFIG += target_predeps
idl_c.name = MIDL

QMAKE_EXTRA_COMPILERS += idl_c

IDL += $$PWD/Button.odl

The .pro file also mentions that I have a RC file

RC_FILE += $$PWD/Button.rc

This RC file contains a TYPELIB for this tlb file, meaning that it has to be available before rc.exe runs

1 TYPELIB "Button.tlb"

I then generate a makefile through QMake and build my project using nmake. Everything runs fine: the console shows no error and the output OCX is generated (and works). I can clearly see that MIDL is executed first, the RC, then the rest. If I try to build using jom, the order is not satisfied anymore. jom seems to try to execute MIDL and RC in parallel: Button.tlb is then not yet existing at the time RC.exe needs it and the build fails.

Is there a way to force jom to wait for midl to be done before starting rc?

I'm using QT 5.3.1 under MSVC2013.

1

There are 1 answers

6
Matt On BEST ANSWER

QMake is nothing more than a makefile generator. And your issue is due to make (or jom) parallel job execution. To fix this you only have to induce a single dependency (w/o any recipe) in a Makefile between res/obj and tlb files. This could be done with:

dep_restlb.target = $(RES_FILE)
dep_restlb.depends = $${DESTDIR}/Button.tlb # QMAKE_FILE_BASE is not available here
QMAKE_EXTRA_TARGETS += dep_restlb