我组织了我的项目包含应用程序和测试专业文件和libs pri文件,如下所示:
root
├── apps
│ ├── mainapp
│ │ ├── mainapp.pro
│ │ └── other mainapp files...
│ ├── app2
│ │ ├── app2.pro
│ │ └── other app2 files...
│ └── allApps.pro
├── libs
│ ├── lib1
│ │ ├── lib1.pri
│ │ └── other lib1 files...
│ └── lib2
│ ├── lib2.pri
│ └── other lib2 files...
├── tests
│ ├── test1
│ │ ├── test1.pro
│ │ └── other test1 files...
│ ├── test2
│ │ ├── test2.pro
│ │ └── other test2 files...
│ └── allTests.pro
└── all.pro
all.pro 是一个子目录项目,包含 allApps.pro 和 allTests.pro ,其中包含所有应用和测试专业文件。
库 pri 文件是应用程序和测试项目所包含的库。
使用 qmake / make 构建 all.pro 时,我的库将针对每个应用程序和测试进行编译,这非常耗时。
我的库中包含的文件是否只编译一次?
感谢您的帮助!
我确切地说我使用了 pri 文件用于lib,因为这是我发现使我的库代码可调试的唯一方法,并且在重建项目时会考虑更改。
答案 0 :(得分:1)
你的树不符合你的叙述:树中的任何地方都没有.pri文件。 IOW:您已回答了自己的问题:您的库应该是.pro文件并生成静态库,而不是.pri文件:)
静态库是完全可调试的。例如,您可以将Qt编译为静态库并进行调试。
我还有另一个问题:当我在lib中更改内容时,应用程序不会自动链接它
您需要使应用程序依赖于库。将库添加到应用程序的.pro文件中的PRE_TARGETDEPS
。您还需要在顶级子目录项目中设置适当的依赖项,以确保始终在使用它们的项目之前构建库。例如,添加
apps/mainapp.depends += libs/lib1.