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

Nik*_*kin 4 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)
Run Code Online (Sandbox Code Playgroud)

libs作为一个独立的项目编译好并生成.lib文件.但在这种情况下,我想以某种方式包括libs.proproject一个子目录,虽然app.proTEMPLATE不是subdirs,但app.也许这就是为什么我尝试写东西喜欢SUBDIRS += askelibapp.pro没有效果.总而言之,我的目标是获取.libbuild文件夹中的文件app.pro.我强调这libs是一个git-submodule,因为在libs项目内部不应该改变任何东西来实现我的目标.

我知道,如果我改变也许应该努力app.proTEMPLATEsubdirs.但这不是我真正想做的事情,因为它会使事情变得更加困难,因为项目层次结构将会达到另一个嵌套级别:

subdirs_proj/
    app/
    libs/
Run Code Online (Sandbox Code Playgroud)

代替

app/
    libs/
Run Code Online (Sandbox Code Playgroud)

编辑: 为了理解我的理由:

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

Ben*_*n T 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)
Run Code Online (Sandbox Code Playgroud)

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

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