【问题标题】:How do I specify different libraries for a static Qt project?如何为静态 Qt 项目指定不同的库?
【发布时间】:2017-10-17 20:34:27
【问题描述】:

对于我的 Qt 项目,我使用标准版本的 qmake 进行正常调试和发布构建配置,但是我还需要使用不同的静态 qmake 构建来构建我的项目的静态(Windows 64 位)版本。我目前正在使用命令行和单独的 .pro 文件进行静态构建,但是我更愿意使用与非静态版本相同的 .pro 文件来执行此操作,如果可能的话,也可以在 Qt 创建器中进行。

我已经为 qmake 的静态版本创建了一个工具包,我现在的问题是我无法让 qmake 将我的项目与正确的库链接(我有单独的库版本用于调试、发布和静态构建) .我的 pro 文件如下所示:

CONFIG(debug, debug|release|static ) {
    #debug build
    LIBS += ../third-party-library/debug/library.lib
}

CONFIG( release, debug|release|static ) {
    CONFIG(static, debug|release|static) {
        #static release build
        LIBS += ../third-party-library/static/library.lib
    } else {
        #non-static release build
        LIBS += ../third-party-library/release/library.lib
    }
}

在发布版本的项目设置中,我这样调用 qmake:

qmake.exe MyProject.pro -spec win32-msvc "CONFIG+=static"

我的问题是除了通常的调试/发布配置之外,我如何添加额外的构建配置,以及如何为其指定特定的库?

【问题讨论】:

  • 在 QtCreator 中转到 Projects->Build Settings->Edit build configuration->Add

标签: c++ qt qmake


【解决方案1】:

我认为你的 qmake 定义有点。 CONFIG(debug, debug|release) 语法是一种特殊的构造,因为它们总是被定义,这发现实际上使用了 witch build。对于静态,情况并非如此,所以简单定义为:

CONFIG(debug, debug|release ) {
    #debug build
    LIBS += ../third-party-library/debug/library.lib
} else:CONFIG(release, debug|release) {
    static {
        #static release build
        LIBS += ../third-party-library/static/library.lib
    } else {
        #non-static release build
        LIBS += ../third-party-library/release/library.lib
    }
}

关于为什么这不适用于 debugrelease 并因此需要特殊构造,请阅读此处:https://doc.qt.io/qt-5/qmake-test-function-reference.html#config-config

像这样使用static 只能工作,因为qmake 从CONFIG 变量中读取这样的条件。基本上是contains(CONFIG, static)的缩写。

【讨论】:

  • 嘿,这行得通。我最终使用了更详细的contains(CONFIG, static) 语法。谢谢。
猜你喜欢
  • 2013-12-02
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多