Jak mogę używać serwera kompilacji z Keilem uVision4 (MDK-ARM), skryptować kompilację, używać makefile?

13

Chciałbym uruchamiać codzienne kompilacje lub rejestrować / zatwierdzać uruchamiane kompilacje projektów opartych na Keil MDK-ARM. Do tej pory mam problemy z funkcją pliku wsadowego IDE. Wymaga to zbudowania projektu przynajmniej raz za pomocą IDE, a następnie odprawy pliku wsadowego i powiązanych .__ioraz ._iaplików utworzonych przez IDE.

Ponadto IDE umieszcza wiele plików specyficznych dla użytkownika w pliku wsadowym, takich jak zmienna PATH systemu Windows. Może to stać się problemem dla wielu programistów, ponieważ plik wsadowy do budowania może być zmieniany przy każdym zatwierdzeniu od innego programisty.

Ostatecznie wystarczy śledzić różne przełączniki armcc , armasm i ArmLink .

Czy istnieje sposób na użycie bardziej standardowego makefile do budowy projektów Keil uVision? Czy istnieje metoda tłumaczenia pliku projektu uVision na łatwiejszy w utrzymaniu skrypt kompilacji?

rmaVT
źródło
Myślę, że to świetnie, że wdrażasz serwer kompilacji. Niestety nie mam doświadczenia z systemem programowania Keil, więc nie mogę ci pomóc. Chciałbym zachęcić cię do opublikowania rozwiązania, jeśli zostanie ono wypracowane.
semaj
Buduję projekty Keil za pomocą skryptu wsadowego bez żadnych zależności PATH (innych niż same narzędzia Keil) lub plików __i / _ia. Czy możesz podać więcej informacji na ten temat?
Digikata,
1
@dikikata Korzystam z opcji z IDE, aby wygenerować plik wsadowy. Jest to opisane w dokumentacji Keila. Istnieje również opisana tutaj metoda oparta na wierszu poleceń , ale miałem trudności z uzyskaniem właściwego wyjścia konsoli z tego polecenia. Druga metoda rozpoczyna nowy proces i daje możliwość skopiowania okna wyjściowego do pliku wyjściowego - niezbyt dobra metoda dla serwera kompilacji.
rmaVT
Dla przyszłego odniesienia zakres tego pytania mieści się w obszarze pokrywającym się z innymi stronami Stack Exchange. Pytania dotyczące osadzonych narzędzi takich jak Keil są tu mile widziane! Są również mile widziane w Stack Overflow , ale możesz zapytać w dowolnym miejscu.
Kevin Vermeer
1
@KevinVermeer - Tak, miałem to samo powiedzieć. rmaVT, może się okazać, że przeglądanie pytań oznaczonych jako „keil” w SO jest tak samo edukacyjne, jak pytania oznaczone jako „keil” w EE SE .
Davidcary

Odpowiedzi:

8

To najlepsza metoda, jaką ostatnio wymyśliłem:

W opcjach kompilacji wybierz opcję Utwórz plik wsadowy.

Po zainicjowaniu kompilacji z IDE tworzony jest plik wsadowy wraz z kilkoma plikami tekstowymi w oparciu o opcje ustawione w IDE. Musisz śledzić te pliki generowane przez IDE w kontroli źródła:

  • *.nietoperz
  • * .ini
  • *.__ja
  • * ._ m.in.
  • * .lnp
  • * .sct

Następnie foo.bat można uruchomić ze skryptu kompilacji.

Mimo że tworzy to dodatkowe pliki, które należy śledzić w kontroli źródła, jeśli chcesz budować niezawodnie z wygenerowanego pliku wsadowego, nie trzeba jednak polegać na pliku projektu Keil (foo.uvproj) i IDE. Łatwiej jest mi porównać różnice, a tym samym śledzić zmiany, w wygenerowanych plikach tekstowych (* .__ i), które zawierają flagi kompilatora, niż w pliku .uvproj. Dodatkowo plik wsadowy wywołuje bezpośrednio różne narzędzia, armasm, armcc, armlink. Daje to bezpośredni wynik każdego z tych kroków, a także pozornie lepszy potencjał migracji projektu do innego łańcucha narzędzi w przyszłości, jeśli to konieczne.

Zdaję sobie sprawę, że ta odpowiedź brzmi bardzo podobnie do mojego pierwotnego pytania, ale naprawdę nie znam lepszego sposobu uruchamiania kompilacji skryptowej za pomocą narzędzi Keila. Poprosiłem, aby zobaczyć, co może pochodzić od innych. Nie do końca nie zgadzam się z odpowiedzią @digikata, ale wolę mieć flagi kompilatora i mapę pamięci w łatwiejszym formacie do śledzenia i używać do kompilacji więcej narzędzi w stylu uniksowym niż uruchamiać kompilację typu „wszystko w jednym” z IDE. Myślę, że kompilacja kompleksowa z IDE działa dobrze na mojej stacji roboczej, ale nie na serwerze kompilacji.

EDYCJA : Serwer kompilacji działa w systemie Windows Server 2003. Muszę wyznać, że wolę używać interfejsu wiersza poleceń IDE zamiast pliku wsadowego. To po prostu stało się zbyt trudne do opanowania.

rmaVT
źródło
Pytanie o tę pracę - na jakim systemie operacyjnym działa Twój serwer kompilacji? Linux, Windows 7, Windows Server 2003, Windows Server 2008?
CrimsonX
Dzięki za odpowiedź na pytanie! Wygląda na to, że łańcuch narzędzi uzbrojenia działa w systemie Windows Server 2003 i 2008 R2 zgodnie z Dokumentacją Keila . Następne pytanie dotyczące edycji: Jak radzisz sobie ze zmianami w pliku uvproj (np. Dodając nowe pliki do projektu w celu kompilacji)? Czy musisz ręcznie zmienić opcje kompilacji w pliku promowanym na serwer kompilacji?
CrimsonX
Musisz poddać plik .uvproj kontroli źródła. Działa to całkiem dobrze, chociaż niektóre preferencje użytkownika są nadal pozostawione w pliku pomimo wygenerowanego pliku .userxxxxx. Serwer kompilacji musi tylko otworzyć ten sam „projekt” i go skompilować.
rmaVT,
3

Wywołuję Keil IDE za pomocą wiersza poleceń, aby zbudować (nie wygenerowany plik wsadowy) z poziomu pliku Makefile. Zwykle lepiej jest zablokować pliki projektu za pomocą scm lub wziąć kopię kompilacji odniesienia, zmieniając nazwy odpowiednich nazw projektów.

IDE jest całkowicie zadowolony z pracy z plikami projektów tylko do odczytu, więc jeśli je zablokujesz, drażniące jest to, że musisz je odblokować, aby zmienić ustawienia, zapisać i sprawdzić je ponownie. Jeśli jesteś dość stabilny punkt w projekcie jest to dość niewielkie - a nawet pożądane.

Jeśli weźmiesz kopię referencyjną, kompilacja ma tendencję do psucia się wraz ze zmianami ustawień projektu - zwłaszcza gdy pliki projektu są dodawane lub usuwane z kompilacji. Wyraźne uchwycenie tych zmian niekoniecznie jest złe, ale stanowi dodatkowy krok konieczny do utrzymania kompilacji.

Tak czy inaczej, przekierowanie danych wyjściowych do pliku dziennika za pomocą opcji „-o” umożliwia dostęp do pełnego dziennika wyjściowego. Dziennik nie wychodzi po linii, ale wydaje się, że wszystko tam jest. (Właściwie analizuję format błędu Keil do GNU fmt w celu integracji ze środowiskiem CDT Eclipse. To pozwala mi przejść bezpośrednio do błędów / ostrzeżeń po kompilacji)

Kompilacja z wiersza poleceń generuje również pliki __i, __ia, więc nie muszą one również wchodzić w kontrolę wersji dla serwera kompilacji.

Mam nadzieję że to pomoże.

Digikata
źródło