根据VC ++编译器版本进行条件编译

时间:2009-12-08 15:51:07

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

我正在将VC ++项目从Visual Studio 2005(VC8)迁移到Visual Studio 2008(VC9)。解决方案中的某些项目在项目设置的“附加库目录”字段中有第三方库的路径。路径看起来像这样:
.. \ SomeLibrary \ LIB \ VC9 \ X86

如果我可以使用Visual Studio的“属性页宏”替换编译器版本,那将非常有用,就像我可以使用$(ConfigurationName)代替“Debug”或“Release”一样”。像下面这样的东西是完美的:
.. \ SomeLibrary \ LIB \的 $(CompilerVersion) \ X86

不幸的是,我找不到合适的宏。

请注意,当我说'宏'时,我指的是Visual Studio的“Property Page Macros”,而不是C / C ++预处理器宏。据我所知,你不能在项目设置中使用预处理程序指令。

有谁知道这样做的方法?

3 个答案:

答案 0 :(得分:7)

使用_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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

相关问题