Qt-project是另一个Qt项目的git-submodule

时间:2017-11-14 13:20:29

标签: qt qmake

我有一个Qt应用程序。它有一个.pro文件TEMPLATE = app。项目的子文件夹之一是另一个Qt项目的git-submodule:一组库,它拥有.pro文件TEMPLATE = subdirs

图形上看起来像:

project/
    app.pro (TEMPLATE = app)
    stuff/
    libs/ <-- git-submodule
        libs.pro (TEMPLATE = subdirs)
        lib1/
            lib1.pro (TEMPLATE = lib)
        lib2/
            lib2.pro (TEMPLATE = lib)

libs作为独立项目编译好并生成.lib个文件。 但在这种情况下,我想以某种方式将libs.pro包含在project作为子目录,尽管app.pro TEMPLATE不是subdirs而是{{1} }}。也许这就是为什么我尝试将app写入SUBDIRS += askelib之类的东西没有效果的原因。 总而言之,我的目标是在app.pro的构建文件夹中获取.lib个文件。 我强调app.pro是一个git-submodule,因为在libs项目中不应该改变任何东西来实现我的目标。

我知道如果我将libs app.pro更改为TEMPLATE,它可能会有用。但这不是我真正想要做的事情,因为它会使事情变得更加困难,因为项目层次结构将会达到另一个嵌套级别:

subdirs

而不是

subdirs_proj/
    app/
    libs/

修改 为了理解我的理由:

我的目标是使项目树尽可能清晰。就像你从github克隆一个项目一样,进入它的目录并查看顶层的app/ libs/ 。一切都清晰,容易和美丽。并不像你在顶部看到一个奇怪的app.pro但实际项目在subdirs.pro子目录中,你也有可能将主应用程序子文件夹与库子文件夹混淆,以防它们的名字不那么明显如appapp,但有libstorpedo之类的内容。希望我的想法很明确:))

1 个答案:

答案 0 :(得分:8)

您已经有了答案:将顶级项目设为子项目。

我不明白为什么你要避免这种情况以及为什么你会发现它令人困惑。 恕我直言,拥有一个具有子目标的app项目比具有子目录的subdir项目更令人困惑。

我认为删除文件夹级别不会补偿应用.pro中的子目录。想想一个新的开发人员,如果他看到TEMPLATE=app他将假设你只构建一个项目,但事实并非如此。这意味着你的项目不是“清晰,容易和美丽”,完全违反了最不惊讶的原则。

我经常拥有具有以下架构的项目:

project-a/project-a.pro (subdirs)
         /cli-app/cli-app.pro (app)
         /gui-app/gui-app.pro (app)
         /core-lib/core-lib.pro (lib)
         /3rd-party/3rd-party.pro (subdirs)
         /3rd-party/somelib/somelib.pro (lib)

我发现删除文件夹级别比弄乱项目类型更清楚。如果你害怕开发人员不知道每个子文件夹是什么,也许你应该抛出一些README文件来解释它是什么。

你也可以看一下Qt项目本身,它有很多.pro文件,而不是你有一个包含子目录的app项目。我认为这一点非常明确,特别是对于这样一个大项目。