我有一个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
子目录中,你也有可能将主应用程序子文件夹与库子文件夹混淆,以防它们的名字不那么明显如app
和app
,但有libs
和torpedo
之类的内容。希望我的想法很明确:))
答案 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项目。我认为这一点非常明确,特别是对于这样一个大项目。