取消定义用户选项级别的定义

时间:2018-01-11 12:48:52

标签: visual-studio visual-c++ options preprocessor-directive

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以在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>

答案 1 :(得分:0)

基于@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>

我选择基于特定于用户的定义而不是取消定义的原因是为了不让其他任何人厌倦他们之前没有过的行为;否则他们需要改变他们的定义才能拥有它。