【问题标题】:Preprocessor definitions based on visual studio configuration type基于 Visual Studio 配置类型的预处理器定义
【发布时间】:2022-01-20 22:43:41
【问题描述】:

我正在开发 Visual Studio 2019 中的 C++ 项目,该项目应该能够编译为可执行文件和 DLL。它是遗留代码,包含预处理器标志 AS_EXE 和 AS_DLL,这可能是我需要设置的标志。我只是不知道如何根据项目->属性->配置属性->常规->配置类型中的不同值来执行此操作。我希望动态库 (.dll) 和应用程序 (.exe) 的值分别映射到两个预处理器定义,AS_DLL 和 AS_EXE。

过去几天我在 Google 上四处查看,但没有运气。

如果它可以类似于在调试和发布之间切换时完成,那就太好了,但我感觉它会更复杂一些。这甚至可以实现吗?如果是这样,我将如何去做?

【问题讨论】:

  • 你也可以在编译器命令行上#define 的东西。这类似于调试/发布开关。
  • 不确定您实际要求的是什么,但编译器属性和链接器属性有一个命令行属性,您可以在其中查看完整的命令行参数
  • @engf-010 我在问如何根据项目属性中设置的选项来传递 AS_DLL/AS_EXE。它可能可以在代码中完成,但最好让 Visual Studio 自己传递预处理器定义。类似于 "if ConfigType == dll /D "AS_DLL" else /D "AS_EXE" (伪代码 ofc)
  • 本文档可能会有所帮助:Microsoft-specific predefined macros.

标签: c++ visual-studio visual-studio-2019 preprocessor


【解决方案1】:

您可以在.vcxproj 中使用ItemDefinitionGroup 节点的Condition 属性。

<ItemDefinitionGroup Condition="'$(Configuration)'=='MyConfigForDLL'">
  <ClCompile>
    <PreprocessorDefinitions>AS_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    ...
  </ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='MyConfigForEXE'">
  <ClCompile>
    <PreprocessorDefinitions>AS_EXE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
    ...
  </ClCompile>
</ItemDefinitionGroup>

或者,来自 GUI:

【讨论】:

  • 感谢您的帮助!不幸的是,由于我的帐户是新帐户,我无法投票:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
相关资源
最近更新 更多