Условная компиляция в соответствии с версией компилятора 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++ это даст основной и вспомогательный номер версии компилятора. Это может быть использовано в качестве разделителя.