【问题标题】:Conditional compiling according to VC++ compiler version根据VC++编译器版本进行条件编译
【发布时间】:2009-12-08 15:51:06
【问题描述】:

我正在将我们的 VC++ 项目从 Visual Studio 2005 (VC8) 迁移到 Visual Studio 2008 (VC9)。解决方案中的一些项目在项目设置的“附加库目录”字段中具有第三方库的路径。路径如下所示:
..\SomeLibrary\Lib\vc9\x86

如果我可以使用 Visual Studio 的“属性页宏”之一来代替编译器版本,这将非常有用,就像我可以使用 $(ConfigurationName) 代替“调试”或“发布”一样”。类似以下的内容将是完美的:
..\SomeLibrary\Lib\$(CompilerVersion)\x86

很遗憾,我找不到合适的宏。

请注意,当我说“宏”时,我指的是 Visual Studio 的“属性页宏”,而不是 C/C++ 预处理器宏。据我所知,您不能在项目设置中使用预处理器指令。

有谁知道这样做的方法吗?

【问题讨论】:

  • 那个问题/答案是针对不同的问题。我的问题与 Visual Studio 的属性页宏有关。

标签: visual-studio visual-c++ migration visual-c++-2008 vc8


【解决方案1】:

使用_MSC_VER:

#ifndef _MSC_VER
  // not VC++
#elif _MSC_VER < 1400
  // older than VC++ 2005
#elif _MSC_VER < 1500
  // VC++ 2005
#elif _MSC_VER < 1600
  // VC++ 2008
#elif _MSC_VER < 1700
  // VC++ 2010
#else
  // Future versions
#endif

对于更复杂的示例,请参阅 boost 如何处理 VC++ 版本here

【讨论】:

  • 关于 VS2005 和 VS2008 项目文件的不同(不兼容)版本的要点。
  • 我的任务是让产品准备好在 VS2008 下构建。不幸的是,我团队的其他成员还没有准备好迁移到 VS2008,所以我无法转换项目并将它们提交到我们的源代码控制系统。目前,唯一需要更改以在 VS2008 下工作的代码部分是库路径。如果有一个属性页宏可以用于编译器版本,那就太好了——然后我可以下载团队的源代码,转换项目(几秒钟)并在 VS2008 中执行我的开发/测试/任何操作。
  • 那我恐怕不知道如何实现
【解决方案2】:

您可以使用属性页宏 $(PlatformToolsetVersion) 或 $(PlatformToolset) 例如,对于 vc++ 2012,$(PlatformToolsetVersion) 解析为“110”,而 $(PlatformToolset) 解析为“v110”。因此,在路径中添加“vc$(PlatformToolsetVersion)”会在 vc11 下添加“vc110”或在 vc9 下添加“vc90”。

【讨论】:

  • 不确定这在 VS2005 中是否可用,但我现在正在使用 v90/v100/v110,所以这是完美的。只用了 4 年才得到答案:)
【解决方案3】:

你试过_MSC_VER。对于 Microsoft 的 C++ 编译器,这将给出编译器的主要和次要版本号。它可以用作分隔符。

【讨论】:

  • 谢谢,但我一直在寻找通过 Visual Studio 项目设置执行此操作的方法。我已经编辑了原始帖子以使其更清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-30
  • 1970-01-01
相关资源
最近更新 更多