我有几个 Qt 项目依赖于我开发的 Qt 库。 使用该库的项目的项目文件 (.pro) 定义 LIBS 和 PRE_TARGETDEPS 路径。例如:-
PRE_TARGETDEPS += ../ProjectLibrary_Qt_5_2_1_clang_64bit-Debug/projectlibrary.dylib
LIBS += -L../ProjectLibrary_Qt_5_2_1_clang_64bit-Debug -lProjectLibrary
正如您所看到的,链接库有一个已定义的路径,并且它们是通过 Qt Creator 使用 Shadow Builds 进行构建的。文件层次结构如下:-
- 项目
- ProjectLibrary_Qt_5_2_1_clang_64bit-调试
- ProjectLib.dylib(构建的库)
- 依赖项目
- DependentProject.pro
- ProjectLibrary_Qt_5_2_1_clang_64bit-调试
(dylib 是 OSX 扩展,但它同样可以是 Windows 的 .lib 或 Linux 的 .so)
但是,Jenkins 创建了不同的文件夹结构:-
- 职位
- 项目库
- 工作区
- 项目.dylib
- 工作区
- 依赖项目
- 工作区
- DependentProject.pro
- 工作区
- 项目库
现在有一个额外的目录(工作空间),需要将其反射(reflect)在 .pro 文件中,并且文件夹的名称不同。
显然,如果我只是使用 Jenkins 构建在 .pro 上调用 qmake,则库的路径将会是错误的。
那么,我是否需要创建一个单独的 .pro 只是为了能够反射(reflect)使用 Jenkins 构建时的路径,或者是否有另一种方法可以为 Jenkins 处理在项目文件中指定库的位置,而不必更改目录结构?
最佳答案
解决方案 1) 基于您当前的构建配置
像这样修改您的 .pro 文件:
isEmpty(PROJECT_PATH) {
PROJECT_PATH=../ProjectLibrary_Qt_5_2_1_clang_64bit-Debug
}
LIBS += -L$${PROJECT_PATH} -lProjectLibrary
然后在 Jenkins 中,您应该将 PROJECT_PATH={path to your project} 传递给 qmake
解决方案2)
使用 git submodule
获取 ProjectLibrary 作为构建项目的一部分。那么你就不需要通过Qt Creator手动构建ProjectLibrary。
关于qt - 使用 Jenkins 配置 Qt 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24370815/