代码之家  ›  专栏  ›  技术社区  ›  Carlton

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

  •  2
  • Carlton  · 技术社区  · 7 年前

    对于我的Qt项目,我使用标准版本的qmake进行正常的调试和发布构建配置,但是我还需要使用不同的qmake静态构建来构建项目的静态(Windows 64位)版本。我目前正在使用命令行和分隔符进行静态构建。pro文件,但我更愿意这样做与相同的。我用于非静态版本的pro文件,如果可能的话,可以从Qt creator中获取。

    我已经为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"
    

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Felix    7 年前

    我认为你的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
        }
    }
    

    debug release 因此需要特殊构造,请阅读此处: https://doc.qt.io/qt-5/qmake-test-function-reference.html#config-config

    使用 static 这样做的唯一原因是qmake从 CONFIG 变量它基本上是 contains(CONFIG, static) .