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

Можно ли использовать external build system для VC++ 2013? Я хочу, чтобы Visual Studio ничего не делал, кроме сборки, вызывая мои инструменты сборки.

Я думаю о чем-то вроде этого:

  • Положите все команды сборки в пакетном режиме.
  • Вызовите пакет сборки на уровне проекта, щелкнув правой кнопкой мыши по проекту и выбрав сборку.
  • Вызовите пакет сборки на уровне решения, щелкнув правой кнопкой мыши по решению и выбрав сборку.

    Есть ли пошаговое руководство? Я искал много, но не повезло.

ДОБАВИТЬ 1 - Некоторый прогресс...

После краткого прочтения о MSBuild процесс, я попробовал как ниже.

Во-первых, я редактирую *.vcxproj файл проекта. Я меняю DefaultTargets от Build в MyTarget,

<Project DefaultTargets="MyTarget" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

Затем я добавляю новую цель с именем MyTarget:

  <Target Name="MyTarget">
    <Message Text="Hello, Bitch!" />
  </Target>

Я надеюсь, что это может обойти встроенный процесс VS2013 и выполнять только мою собственную партию.

Хорошо работает в командной строке:

введите описание изображения здесь

Но в Visual Studio, когда я щелкаю правой кнопкой мыши по проекту и выбираю build Команда, это дает мне много ошибок ссылок.

Как избежать этих ошибок ссылок? Поскольку мой пакет может позаботиться обо всем процессе сборки, мне не нужна Visual Studio, чтобы сделать ссылку для меня.

ДОБАВИТЬ 2

Кажется, эти ошибки ссылки появляются, потому что я включаю *.c файлы с ClCompile пометить как ниже.

<ItemGroup>
   <ClCompile Include="z:\MyProject1\source1.c" />
<ItemGroup>

Поскольку я не хочу, чтобы VS2013 вызывал компилятор, я изменяю его на <ClInclude> тег, ошибки ссылок исчезли, но разрешение символов не работает... Кажется, мне не следует менять тег.

ДОБАВИТЬ 3

Вот еще один способ компиляции без ссылок.

Возможно ли для Visual Studio C++ компилировать объекты без ссылок

Кажется, у него нет проблемы разрешения символа. Но я все еще не могу вызвать внешнюю партию, нажав build/rebuild/clean,

2 ответа

Решение

Возможно, вы захотите заглянуть в проекты make-файлов Visual Studio (в категории шаблонов проектов Visual C++/General).

Вы можете указать, какие команды выполнять для каждого типа сборки (очистка, сборка, перестройка). Команда может вызвать make, запустить пакетный файл или вызвать другой инструмент сборки. Он просто выполняет команду. Команды могут содержать различные макросы, которые предоставляет VS (аналогично переменным среды), поэтому команда может быть параметризована для таких вещей, как создание целевого каталога на основе решения или имени или типа проекта (отладка или выпуск).

(В ответе Майкла Барра указывалось на лучшее направление, то есть на лучший шаблон проекта VC++. Вы можете объединить мой ответ и его.)

Наконец-то я решил эту проблему!

Уловка так называемая target overriding, Элементы контекстного меню Visual Studio Build\Rebuild\Clean соответствуют целям MSBuild с именем Build\Rebuild\Cleanсоответственно. Нам просто нужно переопределить их в *.vcxproj файл.

Такие как это:

ПОМНИТЕ, что:

Последняя цель, которую видит MSBuild, это та, которая используется - вот почему мы помещаем в конец существующего файла *.vcxproj.

И в override.projДелай, что хочешь, как показано ниже:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Build">
    <Message Text="Build override!" />
    <Exec Command="kickass.bat" />
  </Target>
</Project>

Следующие 2 ссылки являются хорошими ссылками:

  1. Взломать сборку

  2. Перехват процесса сборки Visual Studio

Обратите внимание, что:

  • Первая ссылка берет в качестве примера проект CSharp, но ТАКЖЕ работает с проектом VC++.

  • 2-я ссылка не работает для проекта VC++, но рациональная аналогична. Если вы не включили Microsoft.Cpp.targets, вы увидите следующую ошибку при загрузке проекта:

ДОБАВИТЬ 1

Как я и пытался, нам не нужен другой overrride.proj файл. Мы можем просто поставить конкретную цель в конце *.vcxprj файл. Такие как ниже:

ДОБАВИТЬ 2

С target overriding упомянутый выше, я могу запустить свой индивидуальный bat файл с project's Команды Build/Rebuild/Clean. Но я заметил, что когда я бегу solution's Команды Build/Rebuild/Clean, я думаю, что это просто следование какой-то project dependency order построить каждый проект соответственно, что не совсем эквивалентно тому, что я хочу для overall build по моему сценарию.

Мой текущий обходной путь заключается в создании dummy project и использовать его, чтобы вызвать партию для моего overall строить.

Другие вопросы по тегам