我有一个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
,但app
.也许这就是为什么我尝试写东西喜欢SUBDIRS += askelib
到app.pro
没有效果.总而言之,我的目标是获取.lib
build文件夹中的文件app.pro
.我强调这libs
是一个git-submodule,因为在libs
项目内部不应该改变任何东西来实现我的目标.
我知道,如果我改变也许应该努力app.pro
的TEMPLATE
来subdirs
.但这不是我真正想做的事情,因为它会使事情变得更加困难,因为项目层次结构将会达到另一个嵌套级别:
subdirs_proj/ app/ libs/
代替
app/ libs/
编辑: 为了理解我的理由:
我的目标是使项目树尽可能清晰.就像你从github克隆项目一样,进入它的目录并查看app.pro
顶层.一切都清晰,容易和美丽.并不像你subdirs.pro
在顶部看到一个奇怪但实际项目在app
子目录中,你也有可能将主应用程序子文件夹与库子文件夹混淆,以防它们的名称不是那么明显app
,libs
而是类似torpedo
和helios
.希望我的想法很清楚:)
您已经有了答案:将顶级项目设为子项目.
我不明白为什么你要避免这种情况以及为什么你会发现它令人困惑.恕我直言,拥有一个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项目.而且我认为这一点非常明确,特别是对于这样一个大项目.