Название: Файлы *.pri; *.prf; *.prl Отправлено: TaIRou от Июль 21, 2011, 23:04 Ребят, доброго времени суток.
Где можно почитать о функциональности данных файлов и какую общую нагрузку они на себе несут и когда стоит их самому создавать и использовать? В документации к Qt проскакивает информация по файлам *.prf, но в том контексте, в котором они используются (подключение через переменную CONFIG), мне невдомек тогда, а зачем файлы *.pri (подключение через функцию include()). К тому же есть еще файлы *.prl... Название: Re: Файлы *.pri; *.prf; *.prl Отправлено: Igore от Июль 22, 2011, 15:43 Могу сказать только про *.pri, используют этот файл для перечисления *.h и *.cpp в проекте, include(*.pri) просто добавляет все что в файле в pro файл. Можно взять студийный проект и создайть pro + pri через addIn, и поизучать их.
Название: Re: Файлы *.pri; *.prf; *.prl Отправлено: TaIRou от Июль 22, 2011, 18:47 Пытаюсь использовать переменную qmake PWD
Цитировать This variable contains the full path leading to the directory where the qmake project file (project.pro) is located. Но столкнулся вот с такой ситуацией:структура каталогов проекта: Код: root work.pri: Код: !build_pass:message(work.pri -- $$PWD) work.pro: Код: include(../work.pri) qmake выдает: Цитировать Project MESSAGE: work.pri -- D:/projects/root/source Project MESSAGE: work.pro -- D:/projects/root/source/work Но я то думал, что после включения work.pri в work.pro, содержимое PWD в вызове функции message будет идентичным в обоих случаях. функция include: Цитировать Включает содержимое файла с заданным именем filename в текущий проект в точку, где происходит включение. Эта функция выполняется если filename включен; в противном случае функция не выполняется. Включенный файл обрабатывается немедленно. И вот теперь я думаю над словами "Включенный файл обрабатывается немедленно" и вроде бы все хорошо, но чувство тревоги не дает мне покоя :D. А именно обрабатывается не само добавленное содержимое файла, а файл как таковой? Название: Re: Файлы *.pri; *.prf; *.prl Отправлено: TaIRou от Июль 25, 2011, 23:14 Ребят, собираю приложение в статике (надо), структура проекта предполагает наличие библиотек, которые будут предоставлять некоторые функции другим библиотекам, а уже те, в свою очередь, - конечному приложению. Причем цепочка может состоять из большего, чем 3, числа звеньев.
Во вложении тестовый набросок проекта. Это зло компонуется только тогда, когда явно добавляешь LIBS += -llib_second в main_app.pro. А нафига мне такая зелибоба? вот написано (большое спасибо за перевод): http://doc.crossplatform.ru/qt/4.7.x/qmake-environment-reference.html#libdepend это ведь то что нужно? в директории Qt/lib лежат аналогичные файлы зависимостей, ничего вроде особенного в них нет. Чего не собирается то? Рад любой критике и предложениям конечно же. (новый топик не стартовал, ибо решил, что всё выше изложенное умещается в контекст использования *.prl) Название: Re: Файлы *.pri; *.prf; *.prl Отправлено: Fess от Июль 26, 2011, 05:40 Такое ощущение, что prl файлы не находятся qmake, либо она все же не желает их использовать.
Может стоит собрать проект с расположением всех файлов "по умолчанию", или убрать из имени библиотек префикс lib Как вариант, можно сделать так: main.pro: include(1lib.pri) 1lib.pri: LIBS += -l1lib include(2lib.pri) 2lib.pri LIBS += -l2lib include(...) Название: Re: Файлы *.pri; *.prf; *.prl Отправлено: TaIRou от Июль 27, 2011, 00:24 Такое ощущение, что prl файлы не находятся qmake, либо она все же не желает их использовать. 1. Видоизменил проектный файл сборки приложения (TEMPLATE = app) - main_app.pro следующим образом: Код: LIBS = Код: c:\qt\mingw\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lbib_first 4. Да, кстати, TARGET'ы, имена директорий и *.pro файлов библиотек я поменял. (правда на результат это не повлияло: сборка по рецепту, приведенному выше, проходила до и после переименования). 5. Не использовал include(), пока рассматриваю это в качестве запасного варианта =/ Как я понял: На первом прогоне сборки, после генерации *.prl и makefile'ов qmake'ом компоновщик, как и должно быть, не нашел bib_first потому что не знает, где ее искать. На втором прогоне, на этапе генерации makefile'ов qmake при объявлении LIBS += -lbib_first, отправляется в поиск соответсвующих *.prl и находит их в Qt/lib, куда мы их вежливо положили (он и в первый раз отправлялся в поиск, но ни фига их не нашел). qmake генерирует соответсвующий makefile, и компоновка отрабатывает без ошибок. До добавления в проектный файл приложения строки LIBS =, qmake находила библиотеку и успокаивалась (не пыталась искать *.prl пусть даже они и лежали в Qt/lib). Если мои рассуждения, основанные на наблюдениях верны, у меня возникает два вопроса: 1. Каким образом явно указать qmake о необходимости искать *.prl в определенных пользователем местах? 2. Почему qmake при нахождении библиотеки пропускает этап просмотра соответсвующих библиотеке файлов зависимостей или изменяет механизм этого просмотра? Название: Re: Файлы *.pri; *.prf; *.prl Отправлено: Fess от Июль 27, 2011, 05:04 т.е. выходит, что теперь в .pro приложения не прописан путь к дополнительным библиотекам?
сторокой LIBS = вы ее просто зачистили и в итоге LIBS содержит только -lbib_first. Qt/lib включена в путь поиска по умолчанию средой, либо через PATH. Где сейчас лежат сами bib_first.a и bib_second.a? В Qt/lib лежат только .prl? Можете выложить обновленный проект? Название: Re: Файлы *.pri; *.prf; *.prl Отправлено: TaIRou от Июль 27, 2011, 12:36 Конечно можем выложить)
В Qt/lib лежат только *.prl, даже точнее сказать bib_first.prl, такого содержания: Код: QMAKE_PRL_BUILD_DIR = d:\projects\static_libs-build\bib_first в LIBS main_app.pro, содержиться только одна запись, о чем сужу по выводу for(i,LIBS):message($$i) из pro-файла приложения Project MESSAGE: -lbib_first Название: Re: Файлы *.pri; *.prf; *.prl Отправлено: Fess от Июль 28, 2011, 06:25 Поковырявшись некоторое время с исходниками могу отметить следующее:
prl файлы должны подхватываться еще до генерации MakeFile-ов. Если все проходит удачно, то появляются строчки: Makefile: c:/QtSDK/Desktop/Qt/4.7.3/mingw/lib/bib_first.prl и в LIBS добавляется -lbib_second prl файлы находятся только в QTPATH/lib, но не в папках, указанных через LIBS CONFIG += link_prl не имеет эффекта (он включен по умолчанию) В разных интернетах оч. мало инфы по теме, например тут (http://www.qtcentre.org/threads/7528-create_prl-and-link_prl). Но нигде не видел решения. Зато висят баги: 1 (https://bugreports.qt.nokia.com/browse/QTBUG-12901), 2 (https://bugreports.qt.nokia.com/browse/QTBUG-10347). Возможно, эта фича qmake вообще не работает правильно на настоящий момент. Возможно, можно как-то еще указать qmake где искать prl файлы. Вижу только два выхода - либо использовать другой подход для достижения того же результата, либо копировать prl в QTDIR/lib ЗЫ: неплохо бы адресовать этот вопрос самим троллям, пусть просветлят в чем магия create_prl & link_prl :D Название: Re: Файлы *.pri; *.prf; *.prl Отправлено: Akon от Май 31, 2012, 20:17 Могу добавить (в примерах Database - статическая либа, тянущая внешние зависимости):
Вот так не работает: Код: LIBS += -L$$ROOT_DIR/bin -lDatabase А вот так работает: Код: QMAKE_LIBDIR += $$ROOT_DIR/bin Мля |