И CONFIG += ordered
, и target.depends =
не поддерживаются бэкэндом qmake MSVC (генератором решений). Еще в 2010 году, когда появился Qt 4.7, документы не упоминали об этом, но в Qt 4.8 разработчики обновили документы соответственно (см. Примечания к разделу «Цель»):
- .depends Этот подпроект зависит от указанного подпроекта. Доступно только на платформах, использующих make-файлы .
- Параметр упорядоченный не поддерживается для Visual Studio.
Но они предоставили обходной путь (который обсуждается в этом загадочном сообщении ), и он все еще действителен и даже задокументирован в том же разделе target . Жаль, что мне пришлось пересобрать qmake и использовать отладчик, чтобы убедиться, что:
a) Существует проект Lib / DLL, в котором TARGET (используется .lib, а не .dll) используется в строке ссылки другого проекта в вашем решении (вы можете изменить строку ссылки с помощью LIBS).
b) Существует проект Exe, TARGET которого используется на пользовательском этапе сборки другого проекта в вашем решении.
- Вы не используете пути в переменной TARGET (для этого используйте DESTDIR / DLLDESTDIR), например, TARGET = $ (SOME_VARIABLE) / myLib, работать не будет.
- Если у вас есть специальное местоположение для ваших библиотек, вы указываете -Lmy / library / path и LIBS + = mylib, а не просто используете LIBS + = my / library / path / mylib
- Конечные проекты создаются перед созданием файла решения. (Вы можете использовать рекурсивный флаг для qmake, чтобы сделать это, например, "qmake -tp vc -r [yourproject.pro]" *
По сути, qmake генерирует зависимость, когда целевое имя вашей библиотеки (yourlib.lib
) равно имени одной из библиотек импорта конечного приложения (которое имеет LIBS += yourlib.lib
).
(См. Источник qmake , где библиотеки импорта добавлены как зависимости, и немного дальше , где они сравниваются с именами целей проекта)
Вот минимальная настройка, которая генерирует зависимости в решении:
solution.pro
TEMPLATE = vcsubdirs
SUBDIRS = main app
app/app.pro
LIBS += main.lib
main/main.pro
TARGET = main
TEMPLATE = vclib
Если вы запустите qmake -r -tp vc
, вы получите явную зависимость в сгенерированном .sln:
GlobalSection(ProjectDependencies) = postSolution
{E634D0EB-B004-3246-AADA-E383A376158F}.0 = {1BD6E999-63E6-36F5-99EE-1A650332198C}
EndGlobalSection