Как я могу использовать сервер сборки с Keil uVision4 (MDK-ARM), создать сценарий сборки, использовать make-файл?

13

Я хотел бы запускать ежедневные сборки или регистрировать / фиксировать сборки, основанные на Keil MDK-ARM. До сих пор у меня все шло с функцией пакетных файлов в IDE. Это потребует от вас , чтобы построить проект , по крайней мере один раз в IDE, а затем проверить в пакетном файле и связанных с ними .__iи ._iaфайлы , созданные в среде IDE.

Кроме того, среда IDE помещает множество пользовательских вещей в пакетный файл, например переменную Windows PATH. Это может стать проблемой для нескольких разработчиков, поскольку пакетный файл для сборки может изменяться при каждом коммите от другого разработчика.

В конечном счете, нужно просто отслеживать различные переключатели для armcc , armasm и ArmLink .

Есть ли способ использовать более стандартный make-файл для создания проектов Keil uVision? Есть ли способ перевода файла проекта uVision в более удобный сценарий сборки?

rmaVT
источник
Я думаю, это здорово, что вы реализуете сервер сборки. К сожалению, у меня нет опыта работы с системой разработки Keil, поэтому я не могу вам помочь. Я хотел бы призвать вас опубликовать решение, если у вас, когда вы получите это работает.
Семай
Я создаю проекты Keil с помощью пакетного скрипта без каких-либо зависимостей PATH (кроме самих инструментов Keil) или файлов __i / _ia. Можете ли вы поделиться какой-либо дополнительной информацией по этому вопросу?
Digikata
1
@digikata Я использую опцию из IDE для создания командного файла. Это описано в документации Кейла. Существует также командной строки приводится метод , описанный здесь , но у меня были трудности с получением надлежащего консольный вывод из этой команды. Второй метод запускает новый процесс и дает вам возможность скопировать окно вывода в выходной файл - не очень хороший метод для сервера сборки.
rmaVT
Для дальнейшего использования этот вопрос находится в области совпадения, которую мы разделяем с другими сайтами Stack Exchange. Вопросы о встроенных инструментальных цепочках, таких как Keil, обязательно приветствуются здесь! Они также приветствуются в Stack Overflow , но не стесняйтесь спрашивать в любом месте.
Кевин Вермеер
1
@KevinVermeer - Да, я собирался сказать то же самое сам. rmaVT, вы можете найти просматривающие вопросы, помеченные как «keil» в SO, так же образовательные, как и вопросы, помеченные как «keil» в EE SE .
Дэвидкари

Ответы:

8

Это лучший метод, который я придумал недавно:

В опциях сборки выберите создать пакетный файл.

Когда вы запускаете сборку из IDE, пакетный файл вместе с несколькими текстовыми файлами создаются на основе параметров, установленных в IDE. Вам необходимо отслеживать эти сгенерированные IDE файлы в системе контроля версий:

  • *.летучая мышь
  • * .ini
  • *.__я
  • * ._ И.А.
  • * .lnp
  • * .sct

Затем foo.bat можно запустить из скрипта сборки.

Хотя это создает дополнительные файлы, которые необходимо отслеживать в системе контроля версий, если вы хотите надежно строить из сгенерированного пакетного файла, это устраняет необходимость полагаться на файл проекта Keil (foo.uvproj) и IDE. Мне легче сравнивать различия и, следовательно, отслеживать изменения в сгенерированных текстовых файлах (* .__ i), которые содержат флаги компилятора, чем в файле .uvproj. Кроме того, пакетный файл вызывает различные инструменты, armasm, armcc, armlink, напрямую. Это дает вам прямой вывод каждого из этих шагов, а также, по-видимому, лучший потенциал для переноса проекта в другую цепочку инструментов в будущем, если это необходимо.

Я понимаю, что этот ответ звучит очень похоже на мой первоначальный вопрос, но я действительно не знаю лучшего способа запустить сборку по сценарию с помощью инструментов Keil. Я попросил посмотреть, что может подойти от других. Я не совсем не согласен с ответом @digikata, но я предпочитаю иметь флаги компилятора и карту памяти в более простом формате для отслеживания и использовать больше инструментов в стиле Unix для компиляции, а не запускать компиляцию «все в одном» с IDE. Я думаю, что компиляция "все в одном" из IDE хорошо работает на моей рабочей станции, но не для сервера сборки.

РЕДАКТИРОВАТЬ : сервер сборки работает на Windows Server 2003. Я должен признаться, что я уступил в использовании интерфейса командной строки IDE, а не командный файл. Просто стало слишком сложно управлять.

rmaVT
источник
Вопрос об этой работе - на какой операционной системе работает ваш сервер сборки? Linux, Windows 7, Windows Server 2003, Windows Server 2008?
CrimsonX
Спасибо за ответ на вопрос! Похоже, что набор инструментов arm работает на Windows Server 2003 и 2008 R2 в соответствии с документацией Keil . Последующий вопрос относительно вашего редактирования: Как вы обрабатываете изменения в файле uvproj (например, добавляете новые файлы в проект для компиляции)? Нужно ли вручную изменять параметры компиляции в файле, продвигаемом на сервер сборки?
CrimsonX
Вы должны поставить файл .uvproj под контроль исходного кода. Это работает довольно хорошо, хотя некоторые пользовательские настройки все еще остаются в файле, несмотря на файл .userxxxxx, который также генерируется. Сервер сборки просто должен открыть тот же «проект» и собрать его.
rmaVT
3

Я вызываю Keil IDE через командную строку для сборки (не сгенерированного пакетного файла) из Makefile. Обычно лучше заблокировать файлы проекта с помощью scm или взять эталонную копию сборки, переименовывая соответствующие имена проектов при этом.

Среда идеально подходит для работы с файлами проекта, доступными только для чтения, поэтому, если вы заблокируете их, раздражающим фактором будет то, что вам нужно разблокировать их, чтобы изменить настройки, сохранить и вернуть их обратно. Если вы работаете достаточно стабильно Смысл в проекте это довольно незначительный - даже желательно.

Если вы берете эталонную копию, то сборка имеет тенденцию ломаться при изменении настроек проекта - особенно когда файлы проекта добавляются или удаляются из компиляции. Точная фиксация этих изменений не обязательно плохая, но это дополнительный шаг, необходимый для поддержки сборок.

В любом случае, перенаправление вывода в файл журнала с помощью параметра «-o» позволяет получить доступ к полному журналу вывода. Журнал не выходит за линию, но, кажется, все там. (Я на самом деле анализирую формат ошибок Keil в GNU fmt для интеграции со средой eclipse CDT. Это позволяет мне сразу перейти к ошибкам / предупреждениям после сборки)

Сборка из командной строки также генерирует файлы __i, __ia, поэтому те, кому не требуется входить в систему контроля версий для сервера сборки.

Надеюсь это поможет.

Digikata
источник