Настроить компилятор сообщений (mc.exe) как настраиваемый шаг компилятора в VС++ 2010?

Может ли кто-нибудь указать конкретные и подробные шаги для настройки mc.exe(компилятора сообщений) для компиляции файла .mc в файл .rc в качестве настраиваемого шага компилятора в VС++ 2010?
Я действительно потерял, как это сделать.

Ответы

Ответ 1

Ханс Пассант почти все правильно. К сожалению, $(InputPath) и $(InputName) не определены в VS 2010. Вместо этого создайте файл сообщения:

  • Щелкните правой кнопкой мыши на своем проекте- > Добавить- > Новый элемент
  • Выберите "Текстовый файл (.txt), но назовите его как".mc "(например," messages.mc ")
  • Создайте файл ресурсов (скажем, "resources.rc" )
  • Отредактируйте файл ресурсов, чтобы он содержал только одну строку:

#include "messages.rc"

Этот файл будет сгенерирован компилятором сообщений. Теперь добавьте настраиваемый шаг сборки для запуска компилятора сообщений:

  • Щелкните правой кнопкой мыши на message.mc и выберите "Свойства".
  • В диалоговом окне "Свойства" выберите "Конфигурация".
  • В разделе "Свойства конфигурации" нажмите "Общие".
  • Убедитесь, что для свойства "Исключено из сборки" установлено значение "Нет".
  • Задайте для свойства "Тип элемента" значение "Custom Build Tool" в раскрывающемся меню и нажмите кнопку "Применить", чтобы появилось свойство "Custom Build Tool".
  • Нажмите "General" в разделе "Свойство Custom Build Tool".
  • Задайте свойство "Командная строка":

    mc% (FullPath)

  • Установите для свойства Description что-то вроде "Компиляция сообщений..."

  • Задайте свойство Outputs:

    % (файл).rc;% (файл).h; MSG0409.bin

Файл MSG00409.bin имеет следующую строку в messages.mc:

ЯзыкNames = (английский = 0x409: MSG00409)

Может быть файл bin для каждого языка, который вы добавляете в messages.mc. Хорошая часть их перечисления на выходе состоит в том, что он будет удален при очистке проекта.

Единственное, о чем я не уверен, это установить свойство "Выполнить до", чтобы гарантировать, что messages.rc будет сгенерирован до компиляции resource.rc. Мне не нужно было устанавливать его, но если вы обнаружите, что компилятор ресурсов пытается выполнить перед компилятором сообщения, вам придется установить это свойство. Он отключен для файла "messages.mc", но его можно установить в свойстве "Custom Build Step" проекта.

Ответ 2

Щелкните правой кнопкой мыши проект, Добавить + Новый элемент, выберите Текстовый файл, назовите его Blah.mc. Введите или вставьте определения. Щелкните правой кнопкой мыши Blah.mc, Properties, Custom build step:

  • Командная строка = mc $(InputPath)
  • Выходы = $(InputName).rc

Отредактируйте свой .rc файл, добавьте:

#include "Blah.rc"

Работал для меня, должен быть близок.

Ответ 3

Если вы хотите использовать пользовательское правило сборки, вы можете сделать это

  • Щелкните правой кнопкой мыши свой проект в Visual Studio → Пользовательские правила сборки
  • Нажмите "Новый файл правил" и заполните поля, я использую этот файл правил для MC.EXE

    <VisualStudioToolFile Name="Message Table Build Rule" Version="8.00">
      <Rules>
        <CustomBuildRule
          Name="Message Table Build Rule"
          DisplayName="Message Table Build Rule"
          CommandLine="[Location]\mc.exe [Unicode] [Verbose] [Inputs]"
          Outputs="Message Table Build Rule"
          FileExtensions="*.mc"
          ExecutionDescription="Message Table Build Rule"
           >
          <Properties>
            <BooleanProperty
              Name="Verbose"
              DisplayName="Verbose mode"
              Description="Foo."
              Switch="-v"
            />
            <BooleanProperty
              Name="Unicode"
              DisplayName="Unicode mode"
              Description="Bar."
              Switch="-u"
            />
            <StringProperty
              Name="Location"
              DisplayName="Location"
              Description="Baz."
              Switch="[value]"
              DefaultValue="C:\Bin\Psdk\Bin"
            />
          </Properties>
        </CustomBuildRule>
      </Rules>
    </VisualStudioToolFile>
    

Ответ 4

В случае, если custom compiler не является требованием, но еще больше, как заставить его создавать файлы .rc из MSBuild. Задача WDK MessageCompiler предлагает эту интеграцию с MSBuild

  <ItemGroup>
    <MessageCompile Include="a.mc">
      <GenerateBaselineResource>true</GenerateBaselineResource>
      <BaselineResourcePath>c:\test\</BaselineResourcePath>
    </MessageCompile>
  </ItemGroup>