Выравнивание переключателей компилятора и компоновщика VS2010 и VS6 для устаревшей сборки

Для устаревшего проекта у меня есть решение в Visual Studio 2010, которое компилируется с использованием компилятора Visual Studio 6 с использованием Нарцисс удлинение для Visual Studio 2010.

Я пытаюсь сделать входные данные компилятора (и компоновщика) равными (насколько это возможно) входным данным, которые у меня были бы при использовании Visual Studio 6. Поэтому я сравниваю файл журнала сборки проекта VS2010 с журналом сборки файл того же проекта в VS6.

Я заметил, что при сборке в VS2010 переключатели компилятора, передаваемые в сгенерированную командную строку, отличаются. Некоторые из этих различий я могу исправить в настройках файла проекта в VS2010, но другие я не могу найти: например, /FD а также /TP переключатели присутствуют при сборке с VS6, но отсутствуют при сборке с VS2010, и я не могу найти эти переключатели в настройках проекта в IDE. и все же другие различия, которые я не могу устранить, потому что я не могу найти переключатели по умолчанию для VS6 (да, я пробовал Google): например, /EHsc Переключатель присутствует при сборке с VS2010, но отсутствует при сборке с VS6, это разница или это компилятор VS6 по умолчанию?

Итак, мой вопрос:

  • Есть ли список значений по умолчанию для компилятора VS6?
  • И для устранения неполадок: как я могу увидеть, какие переключатели вводятся или отклоняются либо IDE или Daffodil?

PS:
* переключатели компилятора, которые я заметил, присутствовали в VS6, но отсутствовали в VS2010: /FD
* переключатели компилятора, которые я заметил отсутствующими в VS6, но присутствующими в VS2010: /EHsc /Gd /TP /WX- /O2 /Oy-
Я знаю, что большая часть этого, вероятно, исправима в настройках проекта, но я все равно решил добавить полный список для этого проекта, надеясь, что кто-нибудь сможет пролить немного света на особенно проблемные переключатели компилятора для выравнивания.

ОБНОВИТЬ: Хорошо, вот что я нашел и решил:

  • /WX- Переключатель (обрабатывать предупреждения как ошибки), вероятно, безвреден, если предположить, что это отрицание переключателя, который изначально отсутствовал, похоже, не имеет никакого эффекта, я подозреваю, что он введен Daffodil
  • /O2 Переключатель (предпочтение быстрого кода) подразумевает несколько других оптимизационных переключателей и был серьезной ошибкой, удаленной клиринг настройка оптимизации в настройках проекта
  • /Oy- Параметр switch (пропустить указатель кадра) также, вероятно, безвреден, если предположить, что это отрицание переключателя, который изначально отсутствовал, похоже, не имеет никакого эффекта, я подозреваю, что он введен Daffodil
  • Был /D _VC80_UPGRADE=0x0600 переключатель, который был введен IDE, но он не имеет смысла для компилятора VS6, поэтому он безвреден
  • /EHsc переключатель (синхронная обработка исключений), очевидно, такой же, как /GX переключатель, который уже присутствовал изначально, так что, кажется, все в порядке
  • /Gd переключатель (по умолчанию cdecl соглашение о вызовах), по-видимому, является значением по умолчанию для компилятора VS6, поэтому его присутствие безвредно, я подозреваю, что оно вводится либо Daffodil, либо IDE
  • /TP Переключатель (обрабатывать все файлы как исходные файлы C ++). Я не могу найти, как настроить это где-либо, но со смешанными источниками это потенциально опасно, я не знаю, как избавиться от этого переключателя, он вводится либо Daffodil, либо IDE

И тогда компоновщик переключается … Мне удалось выровнять большинство из них, кроме:

  • /stack Параметр switch (зарезервированный размер стека) является шестнадцатеричным в VS6, но десятичным и заключен в кавычки в VS2010, поэтому мне пришлось указать его в командной строке, но …
  • /machine:I386 а также /mapinfo:lines Коммутаторы не известны в VS2010, поэтому мне пришлось указать их в командной строке. они добавляются в самый конец командной строки компоновщика после списка файлов, который легко пропустить, и я не уверен на 100%, что компоновщик действительно выбирает дополнительные ключи после списка файлов.

2

Решение

/TP переключатель добавлен IDE.

/stack Коммутатор принимает значения в десятичной или Си-языковой нотации. Я провел быструю проверку, и компоновщик VC6, по-видимому, правильно интерпретирует значения в кавычках, поэтому я не думаю, что вам нужно указывать их отдельно.

/machine значения могут быть указаны на странице свойств Linker \ Advanced, хотя выглядит, что список выбираемых значений не совсем соответствует документации VC6. Это может быть ошибка Daffodil, или может быть, что документация неточна.

/mapinfo переключатель должен быть добавлен в «Дополнительные параметры», как вы упомянули.

Если вы не отключили ведение журнала, вы можете проверить файл журнала команд вашего компоновщика (link.command.1.log), чтобы увидеть точные ключи, переданные в командной строке. Я проверил это с /mapinfo переключатель, и он добавляется в конец командной строки, как и ожидалось.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]