7

我对 Qt 还很陌生,我正在使用新的诺基亚 Qt SDK 测试版,我正在空闲时间为我的诺基亚 N900 开发一个小型应用程序。
幸运的是,我能够正确设置所有内容,并在设备上运行我的应用程序。

我在学校学过 C++,所以我认为它不会那么难。
我使用 Qt Creator 作为我的 IDE,因为它不适用于 Visual Studio。

我还希望将我的应用程序移植到 Symbian,所以我已经运行了几次模拟器,并且我还为 Windows 编译以调试最邪恶的错误。(调试器在设备上无法正常工作。)

我来自.NET 背景,所以有些东西我不明白。

当我点击构建按钮时,Qt Creator 会在我的项目目录中生成一堆文件:

  • moc_*.cpp文件 - 我不知道他们的目的。有人可以告诉我吗?
  • *.o文件 - 我假设这些是目标代码
  • *.rss文件 - 我不知道它们的用途,但它们绝对与 RSS 没有任何关系
  • MakefileMakefile.Debug- 我不知道
  • AppName(不带扩展名) - Maemo 的可执行文件,以及AppName.sis- Symbian 的可执行文件,我猜?
  • AppName.loc- 我不知道
  • AppName_installer.pkgAppName_template.pkg- 我不知道
  • qrc_Resources.cpp- 我想这是为了我的 Qt 资源

AppName相关应用程序的名称在哪里)

我注意到这些文件可以安全地删除,Qt Creator 只是重新生成它们。
问题是它们污染了我的源目录。特别是因为我使用版本控制,如果它们可以重新生成,那么将它们上传到SVN是没有意义的。

那么,有人可以告诉我这些文件的确切用途是什么,我如何要求 Qt Creator 将它们放入另一个目录?

编辑:

似乎我从这个问题的答案中学到的东西比我想象的要多。:)
非常感谢所有帮助过我的人。我给了每个人一个赞成票,因为我可以从每个答案中学到新的东西。

实际上,Rob 推荐的似乎是最方便的解决方案,但我将 Kotti 的回答标记为接受,因为他为我提供了关于 Qt 构建机制如何工作的最佳解释。

解决方案:

似乎 Maemo 和 Symbian 工具链都不支持影子构建,所以我在我的项目文件中使用这些来解决这种情况:

DESTDIR = ./NoSVN
OBJECTS_DIR = ./NoSVN
MOC_DIR = ./NoSVN
RCC_DIR = ./NoSVN
UI_HEADERS_DIR = ./NoSVN
4

4 回答 4

19

不能完全回答您的问题,而只是其中的一部分:) 此外,它是可搜索的。

猜猜如果你用 C++ 开发,你应该知道它Makefile代表什么。另外我认为该.loc文件通常是具有本地化字符串/内容的文件。

替代文字
(来源:thelins.se

将 C++ 构建系统与 Qt 构建系统进行比较,您可以看到 C++ 构建系统(灰色框)没有被修改。我们仍然在这里构建 C++ 代码。但是,我们添加了更多来源和标题。这里涉及三个代码生成器:

元对象编译器(图中的 moc) ——元对象编译器获取所有以 Q_OBJECT 宏开头的类并生成 moc_*.cpp C++ 源文件。该文件包含有关被 moc 的类的信息,例如类名、继承树等,还包含信号的实现。这意味着当你发出一个信号时,你实际上调用了一个由 moc 生成的函数。

用户界面编译器(插图中的 uic) ——用户界面编译器从 Designer 获取设计并创建头文件。然后像往常一样将这些头文件包含到源文件中,从而可以调用 setupUi 来实例化用户界面设计。

Qt 资源编译器(插图中的 rcc) ——资源编译器是我们还没有讨论过的东西。它可以将图像、文本文件等嵌入到您的可执行文件中,但仍可以将它们作为文件访问。我们稍后会看这个,我只是想将它包含在它所属的这张图片中。

我希望这个插图能够阐明 Qt 真正为 C++ 添加新的漂亮关键字所做的工作。如果您好奇,请随意阅读一些生成的文件。只是不要改变它们——每次构建应用程序时都会重新生成它们。

如果您使用的是 QtCreator,moc 文件将在项目目录的 debug 和 release 子目录中生成。uic 文件存储在项目目录的根目录中。rcc 文件通常很无聊,但我相信您可以在项目目录层次结构中的某个地方找到它们。


编辑:您不必将这些文件包含到您的 SVN 中。.ncb这与 commiting和.pdb其他临时文件几乎是一样的废话。每次您更改 Qt 应用程序中的某些内容时,这些临时文件都会重新生成为您所做更改的更新,因此将它们提交给 SVN 是没有意义的。

于 2010-05-24T23:57:32.867 回答
5

您可以通过将以下内容添加到项目的 .pro 文件中来告诉 qmake(以及 QtCreator)将生成的文件放在其他位置

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

于 2010-05-25T01:00:19.597 回答
2

如果您使用影子构建(在Qt Creator 2.0 beta中默认启用),那么所有这些临时文件都会在单独的文件夹中创建。例如:

\MyProjects\ProjectFoo
\MyProjects\ProjectFoo-build

非常有用的恕我直言。

于 2010-05-25T09:23:43.523 回答
1

不要试图获取存储在另一个目录中的文件;相反,告诉 subversion 忽略它们,例如http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.ignore.html中解释的。

大多数源代码控制系统都很好地支持忽略生成的文件,因为这是几乎每个软件项目都会遇到的问题。

于 2010-05-25T00:14:25.117 回答