Both CONFIG += ordered
and target.depends =
are not supported by the qmake s MSVC backend (solution generator). Back in 2010 with Qt 4.7 around, the docs didn t mention that, but in Qt 4.8 the developers have updated the docs accordingly (see the Target section remarks):
- .depends This subproject depends on specified subproject. Available only on platforms that use makefiles.
- The ordered option is not supported for Visual Studio.
But they had provided a workaround (which is discussed in that cryptic post), and it s still valid and even documented in the same target section. Too bad I had to rebuild qmake and use a debugger to verify that:
a) There is a Lib/DLL project of which TARGET (the .lib is used and not the .dll) is used on the link line of another project in your solution (you can modify the link line with LIBS).
b) There is an Exe project of which TARGET is used in a custom build-step of another project in your solution.
- You don t use paths in the TARGET variable (use DESTDIR/DLLDESTDIR for that), e.g, TARGET=$(SOME_VARIABLE)/myLib, won t work.
- If you have a special location for your libs, you specify the -Lmy/library/path and LIBS += mylib, instead of just using LIBS += my/library/path/mylib
- The leaf projects are created before you generate the solution file. (You can use the recursive flag for qmake to do this, like "qmake -tp vc -r [yourproject.pro]"
Basically, qmake will generate dependency when your lib s target name (yourlib.lib
) is equal to the one of the import libraries of the final app (that has LIBS += yourlib.lib
).
(See qmake s source where the import libraries are added as dependencies, and a little further where they re compared with the project target names)
Here is the minimal setup that generates dependencies in the solution:
solution.pro
TEMPLATE = vcsubdirs
SUBDIRS = main app
app/app.pro
LIBS += main.lib
main/main.pro
TARGET = main
TEMPLATE = vclib
With those, if you run qmake -r -tp vc
, you ll get the explicit dependency in the generated .sln:
GlobalSection(ProjectDependencies) = postSolution
{E634D0EB-B004-3246-AADA-E383A376158F}.0 = {1BD6E999-63E6-36F5-99EE-1A650332198C}
EndGlobalSection