所以我使用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中选择调试或发布就足以创建正确的版本。我看到了here之类的其他解决方案,但这并不起作用。在为调试和发布调用以下命令时,可以看到它无法工作的原因:
message($$CONFIG)
将打印qmake的配置。结果如下:
发布:
法yacc的调试异常depend_includepath testcase_targets import_plugins import_qpa_plugin rtti_off incremental_off窗口QT warn_on释放link_prl增量平坦precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe C ++ 11调试静态RTTI no_plugin_manifest QPA的win32 MSVC copy_dir_files释放
对于调试:
法yacc的调试异常depend_includepath testcase_targets import_plugins import_qpa_plugin rtti_off incremental_off窗口QT warn_on释放link_prl增量平坦precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe C ++ 11调试静态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进行调试。 / p>
我的qmake文件是一个典型的文件。以下是可能与问题有关的部分。其他部分只是添加文件和库和路径:
QMAKE_CFLAGS += /MT
QT += core gui
unix:QMAKE_CXXFLAGS += -std=c++11
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MyProg
TEMPLATE = app
那么为什么会出现这个问题呢?为什么我的调试或发布是调试和发布?我如何区分它们?
请询问您是否需要任何其他信息。
答案 0 :(得分:0)
答案是我想在Qt project 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
我们使用变量releaseExec
和debugExec
来避免与Qt CONFIG变量发生名称冲突。
您现在可以使用switch语句:
releaseExec: warning ("this is a release build")
debugExec: warning ("this is a debug build")