使用qmake/Qt Creator与调试/发布库进行链接

26
我正在使用Qt Creator,有一个依赖于C++静态库的Qt GUI项目。我想将发布版本的GUI应用程序与发布版本的.lib文件链接在一起,并将调试版本的GUI应用程序与调试版的.lib文件链接在一起。我已经找到了如何通过在我的.pro文件中包含以下行来向项目添加其他库: LIBS += -L./libfolder -lmylib.lib 但是我看不到如何在发布和调试构建中使用不同的-L命令。
是否有支持qmake实现此功能的方法?
2个回答

45
正常的。
debug:LIBS += ...
else:LIBS += ...

当用户天真地使用CONFIG += debugCONFIG += release来切换调试和发布构建时,解决方案会出现问题(而且他们确实这样做了;在CONFIG += debug之前没有人记得说CONFIG -= release release_and_debug :)

这是基于debug进行作用域限定的规范方式:

CONFIG( debug, debug|release ) {
    # debug
    QMAKE_LIBDIR += "path/to/debug/lib"
} else {
    # release
    QMAKE_LIBDIR += "path/to/release/lib"
}
参考qmake文档编辑 2013-11-17:不要在LIBS中使用-Lfoo。规范的方式是将路径(不包括-L)添加到QMAKE_LIBDIR中。

2
马克,你所说的规范方式是什么意思?一个声望不够高的人在这里提出了这个问题:https://dev59.com/9mAf5IYBdhLWcg3wlDUD。 - László Papp
2
+1 是因为“规范”的形式在Windows和Linux上都可以工作。我在Windows上遇到了一些麻烦,因为使用debug{} release{} 时总是链接到debug{}库。 - McLeary

26
在您的项目文件中,您可以像这样做
debug {
    LIBS += -L./libfolder -lmydebuglib.lib
}

release {
    LIBS += -L./libfolder -lmyreleaselib.lib
}

如果CONFIG qmake变量中已添加DEBUG,那么在调试括号内的位将被使用;同样,如果RELEASE已添加到CONFIG变量中,则包含在发布括号内的内容。

当CONFIG变量中没有debug时,也可以使用"!debug"而不是"release"。

您可以在此处找到有关qmake的更多信息。


2
请注意,如果您将大括号放在下一行,它会出现错误... :-( - user1115652
1
对于Windows也是一样吗?如果Lib文件路径中有空格怎么办? - the_naive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接