Как проверить версию компилятора Visual C при использовании определенного набора инструментов платформы?

#visual-c #boost #visual-studio-2013

#visual-c #boost #visual-studio-2013

Вопрос:

У меня установлено несколько версий Microsoft Visual C (2005, 2008, 2012, 2013).
Я переношу свой проект с VC 2008 на 2013.

Я установил для «набора инструментов платформы» значение «Visual Studio 2013 (v120)».
Я установил «Дополнительные каталоги библиотек» на «C:localboost_1_55_0lib32-msvc-12.0 » (где установлена новая версия Boost).

Пока у меня нет способа проверить, что код был скомпилирован с версией 12 (2013) компилятора. Я установил для «Подавить баннер запуска» значение «Нет». Единственные подробности, которые я получаю, это:

     ..src.cpp(371): warning C4996: 'gmtime': This function or variable may be unsafe. Consider using gmtime_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>          c:Program Files (x86)Microsoft Visual Studio 9.0VCincludetime.inl(101) : see declaration of 'gmtime'
...
Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
...
1>boostlibs.lib(archive_exception.obj) : warning LNK4099: PDB 'vc90.pdb' was not found with '....libdebugboostlibs.lib' or at 'C:UsersmeprjDebugvc90.pdb'; linking object as if no debug info
  

Эти строки, похоже, указывают на то, что используется версия компилятора 9.

Так ли это?

Как я могу установить другой компилятор? Как я могу проверить, что он действительно используется?

Как я могу заставить компилятор и компоновщик использовать определенную версию Boost? Я уже указал его путь в «Дополнительных каталогах включения» и в «Дополнительных каталогах библиотек».

Ответ №1:

Как я могу проверить, что он действительно используется?

Вы можете проверить версию макросов компилятора в своем исходном коде:

(возможно, с BOOST_STATIC_ASSERT(...) помощью)

_MSC_FULL_VER — Вычисляет основные, второстепенные компоненты и номер сборки номера версии компилятора. Старшее число — это первый компонент номера версии, разделенного точкой, младшее число — второй компонент, а номер сборки — третий компонент. Например, если номер версии компилятора Visual C равен 15.00.20706.01, макрос _MSC_FULL_VER вычисляется как 150020706. Введите cl /? в командной строке для просмотра номера версии компилятора.

_MSC_VER — Вычисляется до основных и второстепенных числовых компонентов номера версии компилятора. Основное число — это первый компонент номера версии, разделенного точкой, а второстепенное число — второй компонент.

Например, если номер версии компилятора Visual C равен 17.00.51106.1, макрос _MSC_VER принимает значение 1700.


Эти строки, похоже, указывают на то, что используется версия компилятора 9.

… они могут — с другой стороны, было бы возможно (предположение с моей стороны — у меня нет машины с несколькими версиями для проверки), что преобразование проекта было перепутано, и ваш проект VS2013 теперь содержит явные «ссылки» на все материалы VC9 ( vc90.pdb явно заданные, включают путьиз VS2008 вместо правильного VS2013).

Обязательно проверьте настройки проекта


Как я могу заставить компилятор и компоновщик использовать определенную версию Boost?

Грубо говоря, версия Boost, которую вы используете, определяется порядком вашего пути включения. Следует использовать первую версию Boost, найденную в пути включения.

Поскольку заголовки Boost содержат прагмы компоновщика, вам не нужно явно устанавливать какие-либо входные данные компоновщика для файлов boost lib . Конечно, правильные lib-файлы должны находиться в пути компоновщика.

Ответ №2:

После неудачной попытки установить компилятор на новую версию 12.0 с помощью графического интерфейса Visual C я вручную изменил *.vcxproj файл, заменив все токены «9.0» на «12.0».

Теперь он использует правильный компилятор.