繁体   English   中英

如何检测Qt Creator的目标(调试/发布)(Visual Studio)

[英]How to detect Qt Creator's target (debug/release) (Visual Studio)

所以我使用qmake来创建我的程序,但是我的调试和发布boost库之间始终存在冲突:

libboost_system-vc120-mt-s-1_58.lib(error_code.obj):-1: error: LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.obj

我想以自动化方式实现这一点,从Qt Creator中选择调试或发布就足以创建正确的版本。 我看到其他的解决方案,如一个在这里 ,但是,这并不工作。 调试和发布时调用以下命令时,可以看到它不起作用的原因:

message($$CONFIG)

这将打印qmake的配置。 结果如下:

发布:

lex yacc调试异常depend_includepath testcase_targets import_plugins import_qpa_plugin rtti_off incremental_off windows qt warn_on release link_prl incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe c ++ 11 debug static rtti no_plugin_manifest qpa win32 msvc copy_dir_files release

对于调试:

lex yacc调试异常depend_includepath testcase_targets import_plugins import_qpa_plugin rtti_off incremental_off windows qt warn_on release link_prl incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe c ++ 11 debug static rtti no_plugin_manifest qpa win32 msvc copy_dir_files

请注意, 两者都包含调试和释放......我想知道为什么......

我想指出我从源代码编译了这个Qt版本。 但是当我这样做时,并没有奇怪的东西。 我使用以下命令编译它(配置然后用简单的nmake编译):

configure -debug-and-release -opensource -platform win32-msvc2013 -opengl desktop -static -nomake examples -nomake tests

我尝试了一个枯燥的解决方案,在我的make文件中添加了命令: debug:CONFIG-=release ,但是当我从Qt Creator中选择发布时,这将导致发行版本以30 MB大小而不是14 MB进行调试。

我的qmake文件是一个典型的文件。 以下是可能与问题有关的部分。 其他部分只是添加文件和库和路径:

QMAKE_CFLAGS += /MT

QT       += core gui

unix:QMAKE_CXXFLAGS += -std=c++11

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = MyProg
TEMPLATE = app

那么为什么会出现这个问题呢? 为什么我的调试或发布是调试和发布? 我该如何区分它们?

请询问您是否需要任何其他信息。

答案是我认为在Qt项目org faq 355中

如果您始终接受Qt Creator为您的构建建议的名称,您可以在您的案例中使用以下简单的解决方案(Qt 5.5)适用于Linux,Mac和Windows:

# to distinguish between debug and release executable as target
# we define the variables releaseExec and debugExec
# this only works if the $$OUT_PWD has "Release" in its name
BDIR = $$OUT_PWD
BDIR_STRIPPED = $$replace(BDIR,Release,)
equals (BDIR,$$BDIR_STRIPPED): CONFIG+= debugExec
else: CONFIG+= releaseExec

我们使用的变量releaseExecdebugExec以避免名称冲突使用Qt CONFIG变量。

您现在可以使用switch语句:

releaseExec: warning ("this is a release build")
debugExec: warning ("this is a debug build")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM