qmake 之 CONFIG(debug, debug|release)

本文详细解释了在Qt编程中使用qmake时,如何正确配置debug和release模式,避免将debug和release选项同时设置导致的问题。通过提供具体的qmake语法示例,帮助开发者解决在构建不同编译模式时遇到的困惑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

qmake 之 CONFIG(debug, debug|release)

问题

在 Qt 编程中,多数人用的都是 qmake,并编写相应pro文件。

实际中经常需要对 debug 与 release 两种编译模式 设置不同的选项,比方说链接不同库

遇到该问题,简单看看qmake的manual,不少人都会写出类似下面的内容:

debug {
LIBS += -L../lib1 -lhellod
}
release {
LIBS += -L../lib2 -lhello
}

很不幸,这么做通常不能正常工作。

如果打开看生成的makefile文件,会发现 无论是debug还是release,上面的两个语句都会同时起作用。也就是说,上面相当于

LIBS += -L../lib1 -lhellod -L../lib2 -lhello原因

这是很违反直觉的,因为CONFIG可以同时定义 debug 和 release,但只有一个处于active(当两个互斥的值出现时,最后设置的处于active状态)

比如:

CONFIG = debug
CONFIG += release
...

这种情况下,release处于active状态,但,debug 和 release 都能通过上面的测试。

如何解决

CONFIG(debug, debug|release) {
LIBS += -L../lib1 -lhellod
} else {
LIBS += -L../lib2 -lhello
}

CONFIG(debug, debug|release):LIBS += -L../lib1 -lhellod
CONFIG(release, debug|release):LIBS += -L../lib2 -lhello

那么,CONFIG(debug, debug|release) 这种语法是什么含义呢?

两个参数,前者是要判断的active的选项,后者是互斥的选项的一个集合。

参考

QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets # 明确指定Qt模块 QT += core gui widgets CONFIG += c++17 QMAKE_PROJECT_DEPTH = 0 # You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ mainwindow.cpp \ processSignaldll/for_testing/hhh.cpp \ HEADERS += \ mainwindow.h \ processSignaldll/for_testing/hhh.h \ processSignaldll/for_testing/processSignal.h FORMS += \ mainwindow.ui # Default rules for deployment. # MATLAB配置 -------------------------------------------------- win32 { # 头文件路径 MATLAB_DIR = "E:/Project-Qt/matlab/R2024a" INCLUDEPATH += "$$MATLAB_DIR/extern/include" \ "$$MATLAB_DIR/extern/include/cpp" # 运行时库路径(MSVC规范) LIBS += -L"$$MATLAB_DIR/bin/win64" \ -llibmx \ -llibmat \ -llibmwlapack \ -llibmwblas \ -lmclmcrrt24_1 \ -lmclbase # 项目生成的库(显式指定) LIBS += -L$$PWD/processSignaldll/for_redistribution_files_only \ -lprocessSignal } win32:CONFIG(release, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/release/ -llibmx else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/debug/ -llibmx win32:CONFIG(release, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/release/ -llibmat else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/debug/ -llibmat win32:CONFIG(release, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/release/ -llibmwlapack else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/debug/ -llibmwlapack win32:CONFIG(release, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/release/ -llibmwblas else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/debug/ -llibmwblas win32:CONFIG(release, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/release/ -lmclmcrrt else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/debug/ -lmclmcrrt win32:CONFIG(release, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/release/ -lmclbase else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/R2024a/extern/lib/win64/debug/ -lmclbase INCLUDEPATH += $$PWD/R2024a/extern/lib/win64/microsoft DEPENDPATH += $$PWD/R2024a/extern/lib/win64/microsoft :-1: error: LNK1104: 无法打开文件“mclmcrrt24_1.lib” 如果修改成 -lmclmcrrt\又会报错:-1: error: LNK1104: 无法打开文件“libmx.lib”
03-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值