Ответ 1
Оба CONFIG += ordered
и target.depends =
не поддерживаются бэкендом qmake MSVC (генератором решений). Еще в 2010 году с Qt 4.7 вокруг, документы не упомянули об этом, но в Qt 4.8 разработчики обновили docs соответственно (см. Целевое примечания секции):
- .depends Этот подпроект зависит от указанного подпроекта. Доступно только на платформах , которые используют make файлы.
- Упорядоченная опция не поддерживается для Visual Studio.
Но они предоставили обходное решение (которое обсуждается в этом загадочном посту), и оно все еще действительное и даже документированное в том же target. Жаль, что мне пришлось перестроить qmake и использовать отладчик, чтобы убедиться, что:
a) Существует проект Lib/DLL, из которого TARGET (используется .lib, а не .dll) используется на линии ссылок другого проекта в вашем решении (вы можете изменить линию ссылок с помощью ЛИЭС).
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 будет генерировать зависимость, когда ваше целевое имя lib (yourlib.lib
) равно одной из библиотек импорта окончательного приложения (имеющего LIBS += yourlib.lib
).
(Смотрите qmake source, где библиотеки импорта добавляются как зависимости, а немного далее, где они сравниваются с целевыми именами проекта)
Вот минимальная настройка, которая генерирует зависимости в решении:
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