Настроить компилятор сообщений (mc.exe) как пользовательский шаг компилятора в VC ++ 2010? - PullRequest
13 голосов
/ 12 июня 2010

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

Ответы [ 5 ]

23 голосов
/ 08 февраля 2011

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

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

# include "messages.rc"

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

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

    mc% (FullPath)

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

  • Установить свойство Outputs для:

    % (файл) .rc;% (файл) .h; MSG0409.bin * * тысяча сорок-шести

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

.

LanguageNames = (английский = 0x409: MSG00409)

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

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

1 голос
/ 12 июня 2010

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

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

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

#include "Blah.rc"

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

0 голосов
/ 11 мая 2018

В Visual Studio 2017 - тогда вы можете сделать следующее:

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

<CustomBuildStep>
  <Command>mc "$(InputDir)\$(InputName).mc" -r "$(InputDir)\res" -h "$(InputDir)"</Command>
</CustomBuildStep>

Это должно сгенерировать3 файла .h, .rc и .res - посмотрите в назначенной папке сборки

0 голосов
/ 12 ноября 2013

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

  <ItemGroup>
    <MessageCompile Include="a.mc">
      <GenerateBaselineResource>true</GenerateBaselineResource>
      <BaselineResourcePath>c:\test\</BaselineResourcePath>
    </MessageCompile>
  </ItemGroup>
0 голосов
/ 08 июля 2010

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

  • Щелкните правой кнопкой мыши ваш проект в 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>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...