qt - 使用 Jenkins 配置 Qt 构建

标签 qt jenkins continuous-integration build-process

我有几个 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

(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/

相关文章:

ubuntu - 如何使用交互式身份验证修复 systemctl?

jenkins - 在Openshift中为Jenkins实例配置不同的构建工具

git - CruiseControl.NET 和 Git

Gitlab CI/CD 如何捕获管道中的curl响应

qt - 逻辑值不依赖于实际值(M325)

qt - QGridLayout 中包含在多个单元格中的小部件未居中

c++ - 如何使用多重继承执行转换

c++ - 让对象知道它创建的显示函数内部发生了什么

jenkins(声明性)管道在 'success'之前先执行 'always'吗?

c# - 代码检查 .NET 中的 TeamCity "Cannot resolve symbol"