如何为静态 Qt 项目指定不同的库?

How do I specify different libraries for a static Qt project?

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

我已经为 qmake 的静态版本创建了一个工具包,我现在的问题是我无法根据适当的库将 qmake 用于 link 我的项目(我有单独的库版本用于调试,发布和静态构建)。我的专业文件如下所示:

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"

我的问题是如何在通常的 debug/release 之外添加额外的构建配置,以及如何为其指定特定的库?

我觉得你的qmake定义有点的。 CONFIG(debug, debug|release) 语法是一个特殊的结构,因为总是两者都被定义,这发现 build 被实际使用。对于static,不是这样的,所以简单定义为:

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).

的缩写