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


13

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

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

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

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


Я думаю, это здорово, что вы реализуете сервер сборки. К сожалению, у меня нет опыта работы с системой разработки 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, а не командный файл. Просто стало слишком сложно управлять.


Вопрос об этой работе - на какой операционной системе работает ваш сервер сборки? 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, поэтому те, кому не требуется входить в систему контроля версий для сервера сборки.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.