如何在Visual Studio中设置全局的#define宏定义?

52

我的意思是,在每个源文件中,我都必须插入#define NOGDI来阻止windows.h包含GDI定义(因为它的BITMAP定义与我的定义冲突)。

例如:

#define NOGDI
#include <windows.h>

不幸的是,我必须在每个包含windows.h的单独源文件中执行此操作,但我不想这样做。 我正在使用Visual Studio 2005,有没有办法在全局范围内设置#define某些东西?(即在所有源文件中)。


除了tenfour的答案外,您可以创建类似config.h这样的文件(其中包含您喜爱的#define),然后在您的源代码中包含此文件 :) - onmyway133
当在MSVS中全局定义搜索时,此问题通常出现在搜索结果的前几项中。因此,对于MSVS 2019,是否有一种方法可以在全局范围内定义类似于#define INT(X)static_cast <int>(X)这样的内容? - mireazma
3个回答

84

项目设置 -> C/C++ -> 预处理器 -> 预处理器定义

在这里,您可以定义应用于项目中所有源代码的全局符号。


1
如果这篇回答对您有帮助并解决了您的问题,您应该点击旁边的绿色勾号接受它作为正确答案。 - Adam Rosenfield
@adam:是的,他回复得非常快,我没有来得及选择正确的答案,所以我完全忘记了,抱歉。 - user631623
4
据我所知,这种方法已经不再适用了。那么,针对VS2015是否有新的方法呢?请帮忙翻译一下。 - anon
对于派生自Visual Studio的Atmel Studio 7,您可以在以下位置找到选项:"[项目属性](在项目资源管理器中右键单击项目)-> Toolchain -> YourCopiler Compiler" -> Symbols,点击添加按钮并设置例如F_CPU = 8000000UL。 - Cutton Eye
(至少在msvs 2019中)我只能定义符号,比如条件符号,但不能使用具有实际值的符号定义宏。 - mireazma

6
我已经在整个项目中设置了所需的定义,如下所述,在“项目设置 -> C/C++ -> 预处理器 -> 预处理器定义”中。但是,这仍然没有起作用!最终发现问题在于选中了NoInherit复选框,“从父级或项目默认值继承”。在预处理器定义对话框中的定义行中,它显示为:WIN32;_DEBUG;_WINDOWS;_MBCS;$(NoInherit)。将该复选框重新选中后,定义最终得到了识别。

3
不知何故,我发现取消选中、再选上并重新检查此选项解决了我的问题。我不知道为什么。 - 8bitwide
1
有时尝试重新构建项目会有帮助。如果还是不行,重启VS会有用。 - Atiq Rahman

1
对于VS2015,我编辑了.vcxproj文件,并添加了以下部分:
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
  <ItemDefinitionGroup>
    <ClCompile>      
      <PreprocessorDefinitions>MY_VARIABLE=SOMETHING</PreprocessorDefinitions>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接