2017-10-17 90 views
2

对于我的Qt项目,我使用标准版本的qmake进行正常的调试和发布版本配置,但是我还需要使用不同的静态版本的qmake来构建我的项目的静态版本(Windows 64位版本)。我目前正在使用命令行和分离.pro文件进行静态生成,但是我宁愿使用与非静态版本相同的.pro文件来执行此操作,如果可能的话,也可以使用Qt创建器。如何为静态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" 

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

+0

在QtCreator中,转到Projects-> Build Settings-> Edit build configuration->添加 – scopchanov

回答

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)的简称。

+0

嘿,这工作。我最终使用了更详细的'contains(CONFIG,static)'语法。谢谢。 – Carlton

相关问题