Какова цель мусора (файлы), которые автоматически генерирует спокойный Создатель и как я могу приручить их?

Я довольно плохо знаком с QT, и я использую новую бету Nokia Qt SDK, и я работаю для разработки небольшого приложения для моего Nokia N900 в мое свободное время.
К счастью, я смог настроить все правильно и также запустить мое приложение на устройстве.

Я изучил C++ в школе, таким образом, я думал, что это не будет настолько трудно.
Я использую спокойного Создателя в качестве своего IDE, потому что он не работает с Visual Studio.

Я также хочу портировать свое приложение на Symbian, таким образом, я выполнил эмулятор несколько раз, и я также компилирую, чтобы Windows отладил самые злые ошибки. (Отладчик не работает правильно над устройством.)

Я происхожу из среды.NET, таким образом, существуют некоторые вещи, которые я не понимаю.

Когда я нажал кнопку сборки, спокойный Создатель генерирует набор файлов к моему каталогу проекта:

  • moc_*.cpp файлы - я не знаю их цели. Кто-то мог сказать мне?
  • *.o файлы - я предполагаю, что это объектный код
  • *.rss файлы - я не знаю их цели, но они определенно не имеют никакого отношения к RSS
  • Makefile и Makefile.Debug - Я понятия не имею
  • AppName (без расширения) - исполняемый файл для Maemo, и AppName.sis - исполняемый файл для Symbian, я предполагаю?
  • AppName.loc - Я понятия не имею
  • AppName_installer.pkg и AppName_template.pkg - Я понятия не имею
  • qrc_Resources.cpp - Я предполагаю, что это для моих спокойных ресурсов

(где AppName название рассматриваемого приложения),

Я заметил, что эти файлы могут быть безопасно удалены, спокойный Создатель просто повторно создает их.
Проблема состоит в том, что они загрязняют мой исходный каталог. Особенно, потому что я использую управление версиями, и если они могут быть повторно созданы, нет никакого смысла в загрузке их к SVN.

Так, кто-то мог сказать мне, что точная цель этих файлов, и как я могу попросить, чтобы спокойный Создатель разместил их в другой каталог?

Править:

Кажется, что я узнал больше из ответов этого вопроса, чем я думал, что буду.:)
Большое спасибо всем, кто выручил меня. Я дал всем upvote, потому что я мог узнать о чем-то новом из каждого ответа.

На самом деле то, что рекомендовал Rob, кажется, наиболее удобное решение, но я отметил принятый ответ Kotti, потому что он предоставил мне лучшее объяснение о том, как механизм сборки QT работает.

Решение:

Кажется, что ни Maemo, ни набор инструментальных средств Symbian не поддерживают теневые сборки на данный момент, таким образом, я использую их в своем файле проекта для решения ситуации:

DESTDIR = ./NoSVN
OBJECTS_DIR = ./NoSVN
MOC_DIR = ./NoSVN
RCC_DIR = ./NoSVN
UI_HEADERS_DIR = ./NoSVN
6
задан Philip Kirkbride 19 December 2016 в 20:30
поделиться

4 ответа

Не полный ответ на ваш вопрос, но лишь его часть :) Кроме того, это возможно в Google.

Угадайте, что если вы разрабатываете на C ++, вы должны знать, что означает Makefile . Также я думаю, что файл .loc обычно является файлом с локализованными строками / содержимым.

alt text
(источник: thelins.se )

Сравнивая систему сборки C ++ с системой сборки Qt, вы можете видеть, что система сборки C ++ (серые прямоугольники) осталась неизменной. Мы все еще пишем код на C ++ здесь. Однако мы добавляем больше источников и заголовков. Здесь задействованы три генератора кода:

Компилятор метаобъектов (moc на иллюстрации) - компилятор метаобъектов принимает все классы, начиная с макроса Q_OBJECT, и генерирует исходный файл moc _ *. Cpp C ++. Этот файл содержит информацию о моделируемом классе, такую ​​как имя класса, дерево наследования и т. Д., А также реализацию сигналов. Это означает, что когда вы посылаете сигнал, вы фактически вызываете функцию, сгенерированную moc.

Компилятор пользовательского интерфейса (uic на иллюстрации) - Компилятор пользовательского интерфейса берет проекты из Designer и создает файлы заголовков. Эти файлы заголовков затем, как обычно, включаются в исходные файлы, что позволяет вызвать setupUi для создания экземпляра дизайна пользовательского интерфейса.

Компилятор ресурсов Qt (rcc на иллюстрации) - Компилятор ресурсов - это то, о чем мы еще не говорили. Это позволяет встраивать изображения, текстовые файлы и т. Д. В исполняемый файл, но при этом иметь доступ к ним как к файлам.Мы рассмотрим это позже, я просто хочу включить это в эту картинку, где она и принадлежит.

Я надеюсь, что эта иллюстрация поясняет, что на самом деле делает Qt для добавления новых хороших ключевых слов в C ++. Если вам интересно - смело читайте некоторые из сгенерированных файлов. Только не меняйте их - они восстанавливаются каждый раз, когда вы создаете приложение.

Если вы используете QtCreator, файлы moc создаются в подкаталогах debug и release каталога вашего проекта. Файлы uic хранятся в корне каталога проекта. Файлы rcc, как правило, утомительны, но я уверен, что вы можете найти их где-нибудь в иерархии каталогов вашего проекта.


Изменить: вам не нужно включать эти файлы в свой SVN. Это примерно та же чушь, что и коммит .ncb , .pdb и другие временные файлы. Каждый раз, когда вы что-то меняете в своем приложении Qt, эти временные файлы регенерируются как обновление ваших изменений, поэтому нет смысла фиксировать их в SVN.

18
ответ дан 8 December 2019 в 04:07
поделиться

Вы можете сказать qmake (и, следовательно, QtCreator) поместить сгенерированные файлы в другое место, добавив следующее в ваш .pro файл для проекта

UI_DIR = .ui
MOC_DIR = .moc
OBJECTS_DIR = .obj

Это поместит все ui файлы в каталог .ui, moc файлы в каталог .moc и все .o файлы в каталог .obj. (Конечно, вы можете изменить их по своему усмотрению)

Соответствующая справка по qmake находится по адресу: http://doc.qt.io/archives/4.6/qmake-variable-reference.html#moc-dir

5
ответ дан 8 December 2019 в 04:07
поделиться

Не пытайтесь получить файлы, хранящиеся в другом каталоге; скорее, скажите Subversion игнорировать их, как, например, объясняется на http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.ignore.html .

Большинство систем управления версиями имеют хорошую поддержку для игнорирования сгенерированных файлов, поскольку это проблема, с которой сталкивается почти каждый отдельный программный проект.

1
ответ дан 8 December 2019 в 04:07
поделиться

Если вы используете теневые сборки (по умолчанию включены в бета-версии Qt Creator 2.0 ), то все эти временные файлы создаются в отдельной папке. Например:

\MyProjects\ProjectFoo
\MyProjects\ProjectFoo-build

Очень полезно ИМХО.

2
ответ дан 8 December 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: