Условная компиляция в соответствии с версией компилятора VC++

Я нахожусь в процессе миграции нашего проекта VC++ из Visual Studio 2005 (VC8) в Visual Studio 2008 (VC9). Некоторые из проектов в решении имеют пути к сторонним библиотекам в поле "Дополнительные каталоги библиотек" в настройках проекта. Пути выглядят примерно так:
.. \ SomeLibrary \ Lib \ VC9\x86

Было бы очень полезно, если бы я мог использовать один из макросов страницы свойств Visual Studio для замены версии компилятора во многом так же, как я могу использовать $(ConfigurationName) вместо "Debug" или "Release". Что-то вроде следующего было бы идеально:
.. \ SomeLibrary \ Lib \$ (CompilerVersion)\ x86

К сожалению, я не могу найти подходящий макрос.

Обратите внимание, что когда я говорю "макрос", я ссылаюсь на "Макросы страницы свойств" в Visual Studio, а не на макросы препроцессора C/C++. Насколько я знаю, вы не можете использовать директивы препроцессора в настройках проекта.

Кто-нибудь знает способ сделать это?

3 ответа

Решение

Вы можете использовать макросы страницы свойств $(PlatformToolsetVersion) или $ (PlatformToolset). Например, для vC++ 2012 $(PlatformToolsetVersion) преобразуется в "110", а $ (PlatformToolset) преобразуется в "v110". Поэтому добавление "vc$(PlatformToolsetVersion)" к вашему пути добавит "vc110" в vc11 или "vc90" в vc9.

Использование _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++ здесь

Ты пытался _MSC_VER, Для компилятора Microsoft C++ это даст основной и вспомогательный номер версии компилятора. Это может быть использовано в качестве разделителя.

Другие вопросы по тегам