为什么qmake为vcapp模板选择“多线程调试DLL(/ MDd)”运行时库?

时间:2014-08-25 18:10:58

标签: visual-studio-2010 qmake

我有以下qmake项目文件(test.pro):

CONFIG += debug
TEMPLATE = vcapp

SOURCES = temp.cc

我在cygwin shell中使用以下命令运行了qmake:

env QMAKESPEC=${QT_ROOT}/mkspecs/win32-msvc2010 ${QT_ROOT}/bin/qmake.exe -o test.vcxproj test.pro

我在Visual Studio 2010中打开了.vcxproj文件,并查看了“运行时库”的值。它设置为多线程调试DLL(/ MDd)。这是一个惊喜。它不应该被设置为多线程调试(/ MTd)吗?毕竟,我的模板是vcapp,而不是vclib

我是否需要更改其他设置以指示qmake生成使用多线程调试(/ MTd)的.vcxproj文件?

感谢您的见解。

1 个答案:

答案 0 :(得分:1)

感谢Hans Passant提供的链接。

来自https://qt-project.org/faq/answer/why_does_a_statically_built_qt_use_the_dynamic_visual_studio_runtime_librar

  

使用-MD(d)开关构建Qt,该开关链接动态C / C ++运行时库。这是必要的,因为我们在使用除-MD(d)标志之外的任何东西时都遇到了内存问题,并且通常建议使用。您不应该自己为您的应用程序更改此标志,因为如果您将标志更改为-MT,它将与Qt库的构建方式发生冲突。您也不应该为Qt更改它,因为它可能会导致问题。

     

在使用-static选项时,Qt仍然是静态构建的,这意味着在部署应用程序时不需要分发Qt dll。您必须分发C运行时(如果目标计算机上尚不存在),请参阅我们的部署文档[qt.nokia.com]。

     

如果您仍然选择更改此设置,则可以在qmakepec的qmake.conf文件中完成。在哪里说-MD你需要把它改成-MT。对于Visual Studio 2005,还需要更改mkspecs / features中的相关文件以删除对mt.exe的调用。如上所述,我们无法支持您因进行这些更改而遇到的任何问题。