无法添加定义以提升构建
Posted
技术标签:
【中文标题】无法添加定义以提升构建【英文标题】:Unable to add defines to boost build 【发布时间】:2013-06-29 14:13:00 【问题描述】:我正在尝试使用 boost buildsystem 构建 boost 序列化/文件系统/系统的调试版本。这是我使用的:
b2 serialization filesystem system variant=debug link=static threading=multi
runtimelink=static define=_HAS_ITERATOR_DEBUGGING=0 toolset=msvc-11.0
但是,当我在调试 Visual Studio 项目中包含该库时,我仍然会收到如下错误:
(basic_iarchive.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in Game.obj
这让我相信我在增强构建中的“定义”没有任何效果。什么是正确的语法?我找不到任何示例,文档也没有说明任何其他内容。
编辑:我想强制我想在我的 boost 构建中定义 _HAS_ITERATOR_DEBUGGING=0
【问题讨论】:
尝试指定define=_ITERATOR_DEBUG_LEVEL=0
msdn.microsoft.com/en-us/library/hh697468.aspx
【参考方案1】:
正如 Igor 评论的那样,添加 define=_ITERATOR_DEBUG_LEVEL=0
对我有用。
_HAS_ITERATOR_DEBUGGING
然后由 MS-headers 基于上述设置定义,因此您不应该尝试直接设置它。
在某些情况下(实时 3d)将其设置为 0 会显着提高调试性能,因此肯定有一些用例可以说明这一点,尽管重新编译所有在其接口中公开 STL 容器/迭代器的 DLL 会很痛苦。
【讨论】:
【参考方案2】:_ITERATOR_DEBUG_LEVEL
不是 boost 的东西,而是 MSVC 附带的标准库实现的一部分。您必须非常小心地使用此设置的一致值编译构建中的所有内容。在许多情况下,链接器会诊断出违规行为,就像您引用的消息一样,不幸的是,它可能未被检测到。由于它改变了大多数 std 集合和相关内容的大小和布局,猜猜接下来会发生什么。
默认情况下它没有设置任何东西,当你包含一些标准头文件时,它会寻找_DEBUG并将自己设置为2。如果系统中没有任何东西设置它并且你一直使用_DEBUG,这是个好方法。
我不熟悉 boost,但我猜你引用的设置会强制宏值为 0。如果是这样,难怪你有差异。将其设置为 2,或者如果您的意思是 0,请继续在所有项目中使用它。
【讨论】:
以上是关于无法添加定义以提升构建的主要内容,如果未能解决你的问题,请参考以下文章
TFS 构建定义 - 添加步骤以运行 DacPac 进行单元测试
javascript 允许在Adblock Plus中将特定频道列入白名单,方法是在URL中添加频道名称,并构建过滤器以添加自定义过滤器