gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:26 26 4
gpt4 key购买 nike

所以我使用 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 的配置。结果如下:

发布:

lex yacc debug exceptions 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 debug exceptions 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,但这会导致发布版本变为调试时大小为 30 MB 而不是 14 MB我选择从 Qt Creator 发布。

我的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 project org faq 355

如果您总是接受 Qt Creator 为您的构建建议的名称,您可以在您的 pro 文件中使用以下简单的解决方案,在我的例子中 (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")

关于c++ - 如何检测 Qt Creator 的目标(调试/发布)(Visual Studio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32046181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com