Можно ли использовать компилятор VC++ 6 в Visual Studio 2012?

Я использую Visual Studio 2012 для разработки своих проектов, и я также установил Visual Studio 2010, что дает мне возможность использовать компилятор VC++10 в Visual Studio 2012 (свойства проекта), но я также установил Visual C++ 6 и почему-то возможность использовать компилятор VC++6 отсутствует в Visual Studio 2012, как мне добавить эту опцию (вручную)?


person Community    schedule 22.02.2013    source источник
comment
Я сомневаюсь, что вы можете. Возможно, через пользовательский проект Makefile, но не будет настройки, позволяющей Visual Studio делать это.   -  person Dark Falcon    schedule 22.02.2013
comment
Есть ли какие-то конкретные причины, по которым вы хотите использовать старый компилятор?   -  person John Saunders    schedule 22.02.2013
comment
потому что я не могу обновить 5000 файлов VC++ 6 cpp и h (одно решение).   -  person    schedule 23.02.2013
comment
+1 за то, что ты задира. Знаете, как те герои боевиков, которые взрывают целые аэропорты только для того, чтобы поймать одного плохого парня-хакера.   -  person Lightness Races in Orbit    schedule 23.02.2013
comment
Вы делаете это неправильно   -  person Bartek Banachewicz    schedule 23.02.2013
comment
@LightnessRacesinOrbit ха-ха, мило :p   -  person    schedule 25.02.2013
comment
но, конечно, вы хотели бы настроить VC6, чтобы он мог использовать компилятор 2012 года... IDE VC6 потрясла.   -  person gbjbaanb    schedule 10.05.2013


Ответы (1)


Ответ определенно может быть. Это кажется вполне возможным, но мне не удалось получить копию VC 6, поэтому я не смог ее проверить. Что мне удалось сделать, так это заставить VS 2012 использовать VC 7 (VS 2002) для компиляции проекта.

Обновление: ответ определенно да. ОП указывает в комментариях, что он смог заставить работать VC 6, используя это решение.

Конфигурация

Я сделал это, установив следующее (в порядке установки):

Windows 7, SP1, 32-разрядная версия

Я выбрал Windows 7, потому что это самая ранняя версия Windows, которая будет поддерживать VS 2012. Я использовал 32-разрядную версию, потому что VS 2002 (VC7) не устанавливается на машину x64.

Visual Studio 2002, SP1

Как я уже говорил, я не мог получить VC6. На сайте Microsoft его не найти. комментарий Брюса под этот вопрос дает следующую полезную информацию:

Visual C++ 6.0 недоступен (в том числе через MSDN) от Microsoft, поскольку он включает в себя Microsoft JVM. Дополнительные сведения см. по этой ссылке. – БрюсКран

Увидев вышеизложенное, я решил, что установка VS 2002 (VC 7) будет следующим лучшим решением.

Очевидно, именно сюда вы бы установили VC 6, если у вас есть копия1.

1Должен отметить для всех, кому это интересно, что VC 6 доступен на Ebay. Если бы мне платили в реальной валюте, а не в баллах, я бы сделал все возможное и получил копию VC 6 для тестирования.

Visual Studio 2010, SP1

Единственная причина этого в том, что это требование для Daffodil. Подробнее о нарциссе ниже.

Visual Studio 2012, обновление 2

Это требование исходного вопроса.

Нарцисс

Это набор файлов конфигурации, который позволяет VS 2010 и VS 2012 ориентироваться на старые компиляторы VC.

В настоящее время поддерживаются следующие версии компилятора VC:

  • ВК 8 (Visual Studio 2005)
  • ВК 7.1 (Visual Studio 2003)
  • ВК 7 (Visual Studio 2002)
  • ВК 6 (Visual Studio 6)

Я должен отметить, что Daffodil официально не поддерживает VS 2012 в качестве IDE, но, похоже, он работает. С сайта Нарцисс:

Daffodil отлично работает в VS 2012 и более поздних версиях2, если также установлен VS 2010.

2 При использовании VS 2013 и VS 2015 возникает проблема отладки, как указано здесь:
Отладочная информация не совпадает при использовании набора инструментов платформы v60 в Visual Studio 2013

Тестирование

Чтобы проверить вышеизложенное, я создал новый консольный проект C++ Win 32 в Visual Studio 2012. Затем я удалил из проекта все файлы заголовков и cpp — в них есть вещи, специфичные для VS 2012, поэтому они не нужны. Затем я добавил простой файл «hello world», который я мог бы использовать для тестирования:

#include <iostream.h>

void main()
{
   cout << "Hello World!" << endl;   
}

Используя проект как есть (нацеленный на VS 2012), я попытался его собрать, но это не удалось.

Затем я щелкнул проект правой кнопкой мыши и выбрал свойства. Я выбрал Свойства конфигурации в левой части диалогового окна, а затем в разделе Набор инструментов платформы справа выбрал v70. Вы заметите, что есть вариант для v60:

Проверить свойства проекта

Затем я сохранил изменения в проекте и выполнил сборку. Он успешно построил exe. Чтобы убедиться, что используется VC 7, я запустил Process Monitor. во время компиляции:

Монитор процесса во время компиляции

Как видите, компилятор cl.exe вызывается из каталога VC 7.

Последние мысли

Первоначальный вопрос включает в себя компиляцию существующего проекта VC 6. Всего пара замечаний по этому поводу.

Я предполагаю, что для работы ретаргетинга вам придется создать новый пустой проект в VS 2012, а затем добавить все существующие исходные файлы. Причина этого заключается в том, что, очевидно, формат проекта в двух версиях Visual Studio различается.

Как я уже упоминал, я тестировал с использованием VC 7 вместо 6. Я полагаю, что последний шаг для OP — попробовать все это с помощью VC 6. Надеюсь, все это работает.

Ссылки

person chue x    schedule 10.05.2013
comment
Вы, сэр, герой. Вы только что спасли мои мозги и пальцы от обновления тысяч старых файлов cpp. - person ; 11.05.2013
comment
@ThePet - рад, что смог помочь. Итак, вы смогли убедиться, что вышеперечисленное работает с VC 6? - person chue x; 11.05.2013
comment
по крайней мере, для того, что у меня есть - да, возможно, не слишком сложное решение, НО очень и очень много исходных файлов. - person ; 11.05.2013
comment
@MichaelParker Вы установили VS2010? Если да, то я не уверен, в чем еще может быть проблема. - person chue x; 27.02.2016
comment
Плохо - у меня не был установлен VS2010. После того, как я установил 2010, я получил сообщение об ошибке TRACKER : error TRK0005: Failed to locate: "CL.exe".. Затем я добавил путь bin из VS8 в каталоги исполняемых файлов. Теперь я получаю сообщение об ошибке: C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.targets(62,5): error MSB6006: "CL.exe" exited with code -1073741515 - person Michael Parker; 28.02.2016
comment
@MichaelParker - вы устанавливали в порядке, указанном выше, то есть старые версии VS идут первыми? - person chue x; 28.02.2016
comment
Да, я сделал. Я почти уверен, что файл .props, включенный в daffodil, имеет неправильные пути реестра для VS2005 - они не совпадают. См. обсуждение здесь: daffodil.codeplex.com/discussions/651841 - person Michael Parker; 28.02.2016
comment
Есть ли способ выяснить, что именно не так с этой строкой CL.exe в XML? Действительно ли правильно, что файл Microsoft.cpp.Win32.Targets используется даже для старых версий, например. 2005? Просто старый компилятор не распознает некоторые новые ключи? Или этот файл Targets используется в качестве основы, а затем поверх него накладывается конкретный файл platformtoolset .Targets? - person Michael Parker; 28.02.2016
comment
Я вручную добавил в проект все пути SDK платформы и пути VS/VC, это устраняет вышеуказанные проблемы. Теперь я получаю сообщение об ошибке на этапе связывания: 1>LINK : fatal error LNK1104: cannot open file 'odbc32.lib' Итак, я изучаю, зачем это нужно, поскольку моему проекту не нужен этот файл. - person Michael Parker; 28.02.2016