- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 CMake 脚本中添加了一个新配置 DebugWithReleaseCRT
,它基于非常标准的 Debug
配置,但与 Release CRT 链接 (/MD
) > 而不是 /MDd
)并定义 _ITERATOR_DEBUG_LEVEL=0
。我检查了生成的项目文件设置,一切看起来都很好:
C/C++ -> Code Generation -> RuntimeLibrary = Multi-Threaded DLL (/MD)
但是,当我构建它时,我会收到如下错误:
3>3rd-party.lib(3rd-party.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MDd_DynamicDebug' in My.obj
我读作:
your
My.cpp
file is compiled with debug CRT (MDd_DynamicDebug
) while you're trying to link with library3rd-party.lib
that is built with release CRT (MD_DynamicRelease
)
我还检查了这个特定文件 (My.cpp
) 设置,但没有什么特别的,它从父项目继承了 /MD
标志。
尽管指定了 /MD
标志,为什么我的项目仍与调试 CRT 链接?
最佳答案
问题与VS预编译器定义有关_DEBUG
The compiler defines _DEBUG when you specify the /MTd or /MDd option. These options specify debug versions of the C run-time library.
由于我的 DebugWithReleaseCRT
配置基于 Debug
,它也复制了 _DEBUG
定义。事实证明,如果定义了 _DEBUG
,它就会覆盖 /MD
标志 (MD_DynamicRelease
),并且 VS 仍然与调试 CRT 链接(嘿 Visual Studio 团队,是一个惊喜!)。
通过从 DebugWithReleaseCRT
中删除 _DEBUG
解决了该问题。实际上,通过将 _DEBUG
替换为 NDEBUG
可以解决这个问题,因为某些第 3 方依赖项需要精确定义其中之一。我仍然不确定这是配置 DebugWithReleaseCRT 的干净方法,我对以调试配置方式定义 NDEBUG 并没有特别有信心。
关于c++ - VS : How to configure DebugWithReleaseCRT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47442858/
我是一名优秀的程序员,十分优秀!