Qt формат файла pro
Это продолжение этого вопроса Как создать подкаталог для проекта в qt-creator?, где первый ответ не работает для меня.
Я решил это, вручную записав каждый файл в main .pro файл, который не намного сложнее, но мне все равно интересно - как именно .pri-файлы работают, и почему решение, связанное выше, не добавило папки ,а только.pri файлы, так это выглядело в Qt creator:
Итак, мои вопросы:
- каков общий формат .файлы pri?
- почему решение выше не работает?
Я предполагаю, глядя на ваш скриншот, что QtCreator не находит файлы заголовков, перечисленные в .PRI-файл. Если ваш .файл pri находится в другом каталоге, чем ваш .pro file (что, похоже, имеет место здесь), Qt ищет файлы, перечисленные в .PRI-файл в том же каталоге, что .pri файл (не тот .pro file), и любой относительный путь будет разрешен из этого каталога.
когда файл не может быть найден, QtCreator молча игнорирует его и просто не добавить его в папку в виде проекты. Если, например, вы использовали полный путь для линии.ч, круг.H и Безье.ч в вашем числе.pri-файл, как только вы сохраните файл, вы увидите их в представлении проектов. Ключ теперь просто выяснить, что такое соответствующий относительный путь, указывающий на эти файлы относительно .PRI-файл.
формат .pri файлы точно такие же, как формат .pro файлы. Основное различие заключается в намерении; a .pro это то, что большинство людей ожидало бы запустить qmake на непосредственно, в то время как .pri должен быть включен .pro . Когда вы указываете qmake включить другой файл, он просто обрабатывает команды в этом файле, как если бы он был в текущем файле.
в последний раз, когда я смотрел на Qt Creator, он делал бы дополнительный разбор и признавал, что .pri файлы были отдельными, и список любых заголовков / источников/ui/rc / pri файлов из этого файла, особенно в качестве подкаталога, так же, как вы видите include.pri файлы, перечисленные на скриншоте этот вопрос.
The .pri файл содержит список исходных файлов, заголовочных файлов,.файлы пользовательского интерфейса и .файлы qrc в проекте.
Теперь давайте рассмотрим из чего состоит проект Qt . В общем, проект Qt имеет такую структуру:
- файл проекта — описывает файлы, которые входят в проект и содержит необходимые настройки;
- файлы, входящие в проект (или другие подпроекты, если проект разбит на несколько частей).
Ключевую роль имеет файл проекта с расширением .pro . Он содержит списки файлов: исходных кодов, файлов ресурсов, файлов локализации, форм, других файлов, которые входят в проект, а также файлов подпроектов, если проект состоит из нескольких частей. Этот файл также содержит некоторые настройки программы.
Теперь рассмотрим создание своего проектного файла. Создадим новую папку, где будет размещаться проект (например: custom_project ). Создайте файл (это будет файл проекта) введите его имя с расширением .pro (например: custom_project.pro ). Наш файл пока что пустой, но его уже можно открыть в Qt Creator (воспользуйтесь главным меню : File->Open File or Project.. .).
Создать пустой проект можно с помощью мастера построения проектов. Для этого надо воспользоваться главным меню File->New File or Project.. . либо комбинацией клавиш Ctrl+Shift+N . В окне мастера нужно выбрать раздел Other Project (Другой проект) и тип проекта — Empty Qt Project .
После того, как мы открыли проект, Qt Creator предлагает выбрать комплект для его компиляции. В разделе Projects (Проекты) выберем комплект по умолчанию и нажмём Configure Project . В дереве проекта выберем и откроем файл проекта. Теперь настало время исследовать синтаксис проектных файлов Qt .
Проектный файл обычно содержит несколько настроек в виде специальных переменных, каждая из которых играет свою особую роль. Среди большого количества настроек, которые задают в .pro -файле:
- тип проекта (приложение, динамическая или статическая библиотека, проект, который состоит из подпроектов);
- общие настройки проекта;
- настройки компиляции;
- путь, где будет размещён исполняемый файл, библиотека или бинарный файл во время процесса компиляции;
- пути к файлам, библиотекам и другим частям проекта необходимым для компиляции;
- файлы, входящие в проект;
- дополнительные действия, которые будут выполняться в процессе компиляции проекта.
Теперь нам осталось добавить в проект файл с текстом программы. Для этого мы снова можем воспользоваться мастером. В категории Files and Classes (Файлы и классы) выберем раздел C++ и выберем тип файла " C++ Source File " ( Файл исходных текстов C++ ). Поскольку это будет главный файл программы, то дадим ему привычное для этого случая название: main.cpp . Текст программы является обычным:
После создания main.cpp , вновь откроем файл проекта и обратим внимание на несколько дополнительных строк:
Переменная SOURCES хранит список .cpp файлов. В табл. 12.1 мы предоставляем список переменных, которые часто участвуют в описании проекта:
Проект файлов содержит всю информацию, требуемую qmake для сборки вашего приложения, библиотеки или плагина. В основном, вы используется серии объявлений для спецификации ресурсов в проекте, но поддержка простых программных конструкций позволяет описывать различные процессы сборки для различных платформ и сред.
Элементы проектного файла
Формат проектного файла используемый qmake может быть использован для поддержки как простых, так и довольно сложных систем. Простой проект файлов использует простой декларативный стиль, объявляющий переменные идентифицирующие исходные и заголовочные файлы в проекте. Комплексные проекты могут использовать структуры потоков для управления процессом сборки.
Переменные
В проектном файле, переменные используются для хранения списка строк. В простейшем проекте, эти переменные информируют qmake о настройке параметров для использования, или поставляют имена файлов и используемых путей в процессе сборки.
qmake ищет эти переменные в каждом проектном файле, и используется содержимой для определения того, что должно быть записано в Makefile. Например, список значений в переменных HEADERS и SOURCES используются для уведомления qmake об исходных и заголовочных файлах в некоторых директориях.
Переменные могут также использоваться внутри для хранения временных списков значений, а существующие списки значения могут быть перезаписаны или расширены новыми значениями.
Присваивание списка значений переменной:
Список значений переменных расширяется следующим образом:
Примечание: Первое задание значений включает только те значения, которые указаны в одной строке с переменной HEADERS. Второе объявление разделяет значения как в переменной SOURCES через обратный слеш ("\").
Переменная CONFIG является другой специальной переменной, которая используется qmake, когда генерируется Makefile.
Список переменных
Далее представлен список наиболее часто используемых переменных и описание их содержания.
- CONFIG - Основные параметры настройки проекта
- DESTDIR - Директория, в которую будет помещён бинарник или исполняемый файл
- FORMS - Список UI файлов, которые реализуют пользовательский интерфейс
- HEADERS - Список имён заголовочных файлов (.h) и путей к ним
- QT - Список модулей Qt, используемых в проекте
- RESOURCES - список ресурсный файлов (.qrc), включаемых в финальный проект.
- SOURCES - список файлов исходных кодов, которые используются при сборке проекта.
- TEMPLATE - шаблон, используемый в проекте. Определяет то, чем будет проект после компиляции, приложением, библиотекой или плагином.
Содержимое переменных может быть присвоено другим переменным с помощью подстановки двух знаков $ перед именем других переменных.
Пробелы
Обычно, пробелы разделяют значения в переменных. Для указания переменной, содержащей в своём имени пробел, вы должны заключить переменную в скобки:
Текст, заключённый в скобки, считается одним предметом в списке переменных. Подобный подход также применяется и в других случаях. Например при указаний путей к файлам, содержащим пробелы:
Комментарии
Встроенные функции и управление потоком
qmake предоставляет несколько встроенных функций для включения содержания переменных. Обычно используемой функцией в простых проектах является функция include(), которая принимает имя файла в качестве аргумента. Содержание файла включается в проект в том месте, где была использована функция include. Функция include обычно используется для подключения других проектов файлов.
Поддержка условных структур делает доступным области, которые ведут себя, как если бы они были объявления в языке программирования:
Назначение внутри скобок будет выполнено если является верным. В этом случае, win32 должна быть установлена в параметре CONFIG . Это происходит автоматически в Windows. Открывающаяся скобка должна стоять на одной строке с условием.
Более сложные операции над переменными обычно требуют циклов, которые предоставляются встроенными функциями, такими как find(), unique(), count(). Эти функции, и многие другие предоставляют управление строками и путями с поддержкой ввода и вызова внешних инструментов.
Шаблоны проекта
Переменная TEMPLATE используется для объявления типа проекта, который будет собран. Если он не декларирован в проектном файле, то qmake соберёт проект как приложение и генерирует Makefile или эквивалентный.
Далее представлены типы проектов, доступные для генерации qmake и их описания.
- app (по умолчанию) - Makefile собирается в приложение
- lib - Makefile собирается в библиотеку
- aux - Makefile ни во что не собирается. Используется если не требуется компилятор, но требуется создать цель, например, если проект написан на интерпретируемом языке.
- subdirs - Makefile содержит правила для поддиректорий указанных с использованием переменной SUBDIRS. Каждая поддиректория должна содержать свой собственный файл проекта.
- vcapp - Visual Studio Project file для сборки в приложение
- vclib - Visual Srudio Project file для сборки в библиотеку
- vcsubdirs - Visual Studio Project file для сборки проекта в поддиректориях
Когда используются поддиректории, то qmake генерирует Makefile для каждой поддиректории, выполняются все проектные файлы, которые находятся и запускается утилита make на вновь созданном Makefile. Переменная SUBDIRS используется для содержания списка всех поддиректорий, с которыми будет произведена работа.
Основная конфигурация
Переменная CONFIG указывает параметры и функции, которые должны быть выполнены в проекте.
Проект может быть собран в режиме отладки и выпуска, или в обоих. Если отладка и выпуску указаны одновременно, то в силу вступает последний. Если указано debug_and_release, собираются обе версии проекта. Makefile, который генерируется qmake включает правило, которое собирает обе версии. Это может быть выполнено следующим образом.
Примечание. Переменная CONFIG также может иметь условия сборки, если используются или не используются определённые параметры для сборки проекта.
В данном случае включаются различные конфигурации для сборок отладки и выпуска.
Примечание. Некоторые из этих параметров получают эффект только в случае соответствия платформе сборки.
- qt - Проект является Qt приложением и должно быть слинковано с библиотекой Qt. Вы должны использовать переменную QT для контроля добавления Qt модулей, которые требуются для сборки вашего приложения. Это значение добавляется по умолчанию, но Вы можете удалить его, используя qmake для не Qt-проекта.
- x11 - проект является x11 приложением или библиотекой. Это значение не требуется, если целью является Qt.
Шаблоны приложения и библиотеки предоставляют Вам более специализированные настройки параметров процесса сборки. Например, если Ваше приложение используется Qt библиотеку и Вы хотите собрать в режиме debug, то Ваш проект должен содержать следующую строку:
Примечание. Вы должны использовать "+=", а не " prettyprint lang-cpp"> QT += network xml
Примечание. QT включает модули core и gui по умолчанию, также как и модули XML и network. Следующий тип присвоения модулей переменной не включает core и gui и приведёт к ошибкам при компиляции.
Особенности настройки
qmake может быть установлен в расширенные функции настройки, которые будут указаны в файлах .prf. Эти расширенные функции часто предоставляют поддержку кастомных инструментов в процессе сборки. Для добавления функций для процесса сборки добавьте имя функции в переменную CONFIG.
Например, qmake, может быть настроена на сборку со внешними библиотеками, которые поддерживают pkg-config, такие как D-Bus и ogg библиотеки.
Объявление других библиотек
Если используются другие библиотеки в вашем проекте в дополнение к модулям Qt, то Вам нужно указать их в проектном файле.
Пути, по которым qmake ищет библиотеки указываются в переменной LIBS. Вы можете указывать путь к библиотеке, используя Unix-style.
Пути, содержащие заголовочные файлы, также могут быть указаны подобным образом с помощью переменной INCLUDEPATH
На этом шаге познакомимся с некоторыми опциями для файла проекта.
Для более серьезной работы над приложением будет полезно научиться изменять содержимое pro-файлов, что позволит осуществлять более тонкую настройку для проектов. Таблица 1 содержит некоторые опции pro-файла, полный список которых можно получить в официальной документации Qt, поставляемой вместе с самой библиотекой (для этого можно запустить программу Qt Assistant).
Опция | Назначение |
---|---|
HEADERS | Список созданных заголовочных файлов |
SOURCES | Список созданных файлов реализации (с расширением cpp) |
FORMS | Список файлов с расширением ui. Эти файлы создаются программой Qt Designer и содержат описание интерфейса пользователя в формате XML |
TARGET | Имя приложения. Если данное поле не заполнено, то название программы будет соответствовать имени проектного файла |
LIBS | Задает список библиотек, которые должны быть подключены для создания исполняемого модуля |
CONFIG | Задает опции, которые должен использовать компилятор |
DESTDIR | Задает путь, куда будет помещен готовый исполняемый модуль |
DEFINES | Здесь можно передать опции для компилятора. Например, это может быть опция помещения отладочной информации для отладчика debuger в исполняемый модуль |
INCLUDEPATH | Путь к каталогу, где содержатся заголовочные файлы. Этой опцией можно воспользоваться в случае, если уже есть готовые заголовочные файлы и вы хотите использовать их (подключить) в текущем проекте |
DEPENDPATH | В данном разделе указываются зависимости, необходимые для компиляции |
SUBDIRS | Задает имена подкаталогов, которые содержат pro-файлы |
TEMPLATE | Задает разновидность проекта. Например: app — приложение, lib — библиотека, subdirs — подкаталоги |
TRANSLATIONS | Задает файлы переводов, используемые в проекте |
Итак, pro-файл приложения, рассмотренного на шаге 2, выглядит следующим образом:
На следующем шаге рассмотрим некоторые рекомендации для проекта Qt.
Читайте также: