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

时间:2017-10-17 20:34:27

标签: c++ qt qmake

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

我已经为qmake的静态版本创建了一个工具包,我现在的问题是我无法让qmake将我的项目与正确的库链接(我有用于调试,发布和静态构建的独立库版本) 。我的专业文件看起来像这样:

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"

我的问题是除了常用的调试版本之外,我该如何添加额外的构建配置,以及如何为其指定特定的库?

1 个答案:

答案 0 :(得分:1)

我认为你的qmake定义有点儿。 CONFIG(debug, debug|release)语法是一个特殊的构造,因为它们都是定义的,并且发现实际上使用了构造。对于静态,情况并非如此,因此只需将其定义为:

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)的缩写。