代码之家  ›  专栏  ›  技术社区  ›  Venemo

qt creator自动生成的垃圾(文件)的用途是什么?如何驯服它们?

  •  6
  • Venemo  · 技术社区  · 15 年前

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

    我在学校里学过C++,所以我觉得不会那么难。
    我使用qt creator作为我的IDE,因为它不适用于Visual Studio。

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

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

    当我点击build按钮时,qt creator将生成一组文件到我的项目目录:

    • moc_*.cpp 文件-我不知道它们的用途。有人能告诉我吗?
    • *.o 文件-我想这些是目标代码
    • *.rss 文件-我不知道它们的用途,但它们肯定与RSS无关。
    • Makefile Makefile.Debug -我不知道
    • AppName (无扩展名)-maemo的可执行文件,以及 AppName.sis -我想是塞班的可执行文件吧?
    • AppName.loc -我不知道
    • AppName_installer.pkg AppName_template.pkg -我不知道
    • qrc_Resources.cpp -我想这是我的qt资源

    (何处) 附加名 是相关应用程序的名称)

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

    那么,有人能告诉我这些文件的确切目的是什么吗?我怎样才能让qt creator把它们放到另一个目录中呢?

    编辑:

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

    实际上,Rob推荐的似乎是最方便的解决方案,但我认为科蒂的回答是可以接受的,因为他向我提供了有关qt构建机制如何工作的最佳解释。

    解决方案:

    似乎到目前为止,Maemo和Symbian工具链都不支持影子构建,因此我在项目文件中使用这些工具来解决这种情况:

    DESTDIR = ./NoSVN
    OBJECTS_DIR = ./NoSVN
    MOC_DIR = ./NoSVN
    RCC_DIR = ./NoSVN
    UI_HEADERS_DIR = ./NoSVN
    
    4 回复  |  直到 8 年前
        1
  •  18
  •   M. Williams    15 年前

    不是对你的问题的完整回答,只是其中的一部分:)而且,这是一个很好的选择。

    如果你在C++中开发,你应该知道什么是C++ Makefile 代表。我也认为 .loc 文件通常是带有本地化字符串/内容的文件。

    alt text http://thelins.se/learnqt/wp-content/uploads/qt-buildsystem.png

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

    元对象编译器(图中的moc) AY.O.Meta对象编译器从QyObject宏开始使用所有类,并生成一个MOC**CPP C++源文件。这个文件包含关于被moc_ed的类的信息,例如类名、继承树等,还包含信号的实现。这意味着,当您发出一个信号时,您实际上调用了由MOC生成的函数。

    用户界面编译器(图中的uic) “用户界面编译器从设计器中获取设计并创建头文件。然后像往常一样将这些头文件包含到源文件中,这样就可以调用SetupUI来声明用户界面设计。

    qt资源编译器(图中的rcc) _“资源编译器是我们还没有讨论过的东西。它可以将图像、文本文件等嵌入到可执行文件中,但仍然可以作为文件访问它们。我们稍后再看,我只想把它放在它所属的图片中。

    我希望这个说明澄清QT真正做什么来添加新的好的关键字到C++。如果您好奇,请随意阅读一些生成的文件。只是不要更改它们,它们在每次构建应用程序时都会重新生成。

    如果使用qtcreator,则在项目目录的debug和release子目录中生成moc文件。uic文件存储在项目目录的根目录中。RCC文件通常很无聊,但我确信您可以在项目目录层次结构的某个位置找到它们。


    编辑:您不必将这些文件包含到您的SVN中。这和承诺是一样的废话 .ncb , .pdb 以及其他临时文件。每次在Qt应用程序中更改某些内容时,这些临时文件都会重新生成,作为对更改的更新,因此没有必要将它们提交给SVN。

        2
  •  5
  •   CHW mmoment    9 年前

    您可以告诉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

        3
  •  2
  •   Rob    15 年前

    如果使用影子生成(默认情况下在 Qt Creator 2.0 beta )然后所有这些临时文件都在单独的文件夹中创建。例如:

    \MyProjects\ProjectFoo
    \MyProjects\ProjectFoo-build
    

    非常有用。

        4
  •  1
  •   rohanpm    15 年前

    不要试图将文件存储在另一个目录中;而是告诉Subversion忽略它们,如中所述。 http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.ignore.html 例如。

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

    推荐文章