在用户选项级别取消定义

Undef a define at user options level

有什么方法可以通过 vcxproj.user 或 Visual Studio 中的 .suo 文件取消定义预处理器宏?

已经在微软Visual Studio界面上扫描过,在互联网上搜索过,在IRC频道上询问过等等,但没有得到明确的答案。

我将解释场景: 有一个 #define 会向调试输出 Window 生成大量文本,这对另一位同事很有用。因为我不需要那个输出,它甚至阻止我看到我自己的输出调试消息,所以让 VS 只输出我的文本会很好!

您可以尝试在 vcxproj.user 文件中使用它:

<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemDefinitionGroup>
    <ClCompile>
      <UndefinePreprocessorDefinitions>DEFINE_TO_UNDEFINE;%(UndefinePreprocessorDefinitions)</UndefinePreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
</Project>

根据@Rami A.的回答,我有以下代码:

ifdef _DEBUG
#define LOG_EVENT(FormatString, ...) \
    {\
        CTime Now = CTime::GetCurrentTime();\
        int nTime = MindUtilsLib::GetCurrentTimeMsec();\
        CString sMessage;\
        sMessage.Format(CString(_T("EVENT(%05d): ")) + CString(FormatString) + CString(_T("\n")), nTime, __VA_ARGS__);\
        ::OutputDebugString(sMessage);\
    }
#else
#define LOG_EVENT(FormatString, ...)
#endif // _DEBUG

并且我将第一行更改为

#if defined(_DEBUG) && !defined(DISABLE_EVENTS_LOGGING)

然后我将 .vcxproj.user 文件设为

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemDefinitionGroup>
    <ClCompile>
      <PreprocessorDefinitions>DISABLE_EVENTS_LOGGING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    </ClCompile>
  </ItemDefinitionGroup>
</Project>

我选择基于特定于用户的定义而不是未定义的原因是为了不让其他人因为没有他们以前已经拥有的行为而烦恼;否则他们需要更改他们的定义才能拥有它。