2010-11-26 28 views
4

我有一个Visual Studio 2008解决方案,其中包含许多项目,这些项目都在项目文件的预处理器定义设置中定义_HAS_ITERATOR_DEBUGGING = 0。但是这似乎只适用于某些项目,而其他项目仍然可以通过启用迭代器调试进行编译。在项目设置(有时)中设置_HAS_ITERATOR_DEBUGGING = 0没有任何作用

我已经检查了解决方案中的每个文件,并且没有定义除项目设置以外的其他_HAS_ITERATOR_DEBUGGING

#define _HAS_ITERATOR_DEBUGGING 0添加到解决方案中的每个stdafx.h的顶部,但是我想知道为什么在项目预处理器定义部分中设置该项目的某些时间不起作用。有任何想法吗?

+0

我认为迈克尔·伯尔的答案可能覆盖它,还要注意有[某些错误,当你建立与`_HAS_ITERATOR_DEBUGGING = 0`](http://stackoverflow.com/questions/787288/problem-when-disabling-checked -iterators-in-vs2008-sp1-has-iterator-debugging0),这是我公司遇到的问题,因为我们的所有软件都是在禁用该选项的情况下构建的。微软的编译团队提到它应该在VS2010中修复。 – birryree 2010-11-26 01:58:44

+0

我不喜欢禁用它的想法,但在大多数情况下,这个选项是病毒式的,不幸的是我们的一个依赖关系是在禁用选项的情况下构建的。 – 2010-11-30 05:54:07

回答

4

有一件事情让我时不时地发现,项目设置很容易在不同的配置(例如Release和Debug)之间变得不同。确保设置在那里或您正在构建的配置。当然,定义拼写正确...

对于有问题的项目,请查看构建日志(BuildLog.htm - 它的链接显示在Build Output窗口中)以及确保

-D "_HAS_ITERATOR_DEBUGGING=0" 

选项显示编译器命令行(实际上在具有传递到编译器的命令行选项响应文件)上。

相关问题