Visual Studio: как программно проверить используемый набор инструментов платформы C++
Я должен построить проект, используя MSVC2012 и набор инструментов платформы v100 (из MSVC2010). К сожалению, я использую функцию C++11"
4 ответов
макрос _MSC_FULL_VER
отличается для каждой группы инструментов платформы; и версии Visual Studio. Для (текущего) предварительного просмотра Visual Studio 2013 это 180020617
. Для Visual Studio 2012 с ноябрьским компилятором CTP 2012 (который дал некоторые C++11), это было 170060315
. Как _MSC_VER
, первые 4 цифры одинаковы для каждой версии Visual Studio; для Visual Studio 2012 они всегда 1700
. Вот пример:
#ifdef _MSC_FULL_VER
#if _MSC_FULL_VER == 170060315
// MSVS 2012; Platform Toolset v110
#elif _MSC_FULL_VER == 170051025
// MSVS 2012; Platform Toolset v120_CTP_Nov2012
#elif _MSC_FULL_VER == 180020617
// MSVS 2013; Platform Toolset v120
#endif
#endif // _MSC_FULL_VER
я столкнулся с той же проблемой и добавил свое собственное определение препроцессора для _MSC_PLATFORM_TOOLSET
.
В свойствах проекта в
- C / C++
- препроцессора
- Определения Препроцессора
добавить _MSC_PLATFORM_TOOLSET=$(PlatformToolsetVersion) чтобы Visual Studio интегрировала версию текущего набора инструментов в препроцессор, чтобы ваш запрос
#if (_MSC_PLATFORM_TOOLSET > 100)
...
#endif
наконец-то сработает.
есть два номера версий, которые мне действительно нужно знать при разработке C или C++ с Visual Studio. Это основной номер версии Visual Studio и основная/вспомогательная версия компилятора" cl".
номер версии Visual Studio отображается в диалоговом окне "О программе". Например, для VS2012 я вижу "версию 11.0.60610.01", поэтому основным номером версии является"11".
построить инструменты, такие как bakefile или CMake создать файлы решения предназначен для основной версии Visual Studio.
версия компилятора "major / minor" - это значение макроса _MSC_VER. Вот небольшая программа, которая отобразит это:
#include <stdio.h>
/*
* Compile and run this on a Visual Studio platform to get
* the version identifier.
*/
#define PRINT_INT_MACRO(m) (printf("%s: \"%d\"\n", #m, m))
int
main() {
PRINT_INT_MACRO(_MSC_VER);
return 0;
}
как говорится в комментарии, вы должны фактически скомпилировать его с помощью компилятора, который вы хотите тестировать. Чтобы избавить вас от хлопот, вот маленький столик:
Name Version _MSC_VER VS 6 6.0 1200 VS 2002 7.0 1300 VS 2003 7.1 1310 VS 2005 8.0 1400 VS 2008 9.0 1500 VS 2010 10.0 1600 VS 2012 11.0 1700 VS 2013 12.0 1800 VS 2015 13.0 1900
надеюсь, что это помогает!
Я не знаю, исправили ли они его в VS2015, но он, безусловно, работает так, как ожидалось.
Я создал следующую программу:
#include <iostream>
using namespace std;
int main()
{
cout << "_MSC_VER: " << _MSC_VER << endl;
cout << "_MSC_FULL_VER: " << _MSC_FULL_VER << endl;
cout << "_MSC_BUILD: " << _MSC_BUILD << endl;
(void) getchar();
return 0;
}
Я добавил конфигурации сборки для каждой версии платформы от VS2010 до VS2015, и _MSC_VER соответствовал версии платформы, как указано выше, несмотря на то, что всегда создавал ее в Visual Studio 2015 в проекте VS2015.
спасибо,
Иэн