Bagaimana saya bisa menggunakan server build dengan Keil uVision4 (MDK-ARM), skrip build, gunakan makefile?

13

Saya ingin menjalankan build harian, atau check-in / commit builded trigger dari proyek berbasis Keil MDK-ARM. Sejauh ini saya sudah mendapatkan banyak hal dengan fitur file batch dari IDE. Ini mengharuskan Anda untuk membangun proyek setidaknya sekali dengan IDE, kemudian check-in file batch dan terkait .__idan ._iafile yang dibuat oleh IDE.

Selain itu, IDE menempatkan banyak hal khusus pengguna ke dalam file batch seperti variabel Windows PATH. Ini bisa menjadi masalah dengan beberapa pengembang, karena file kumpulan untuk bangunan dapat diubah pada setiap komit dari pengembang yang berbeda.

Pada akhirnya, kita hanya perlu melacak berbagai sakelar untuk armcc , armasm , dan ArmLink .

Apakah ada cara untuk menggunakan makefile yang lebih standar untuk membangun proyek uVision Keil? Apakah ada metode menerjemahkan file proyek uVision ke dalam skrip build yang lebih dapat dikelola?

rmaVT
sumber
Saya pikir sangat bagus bahwa Anda sedang mengimplementasikan server build. Sayangnya, saya tidak punya pengalaman dengan sistem pengembangan Keil jadi saya tidak bisa membantu Anda. Saya ingin mendorong Anda untuk mengirim solusi jika Anda ketika Anda menyelesaikannya.
semaj
Saya membangun proyek Keil melalui skrip batch tanpa dependensi PATH (selain dari alat Keil sendiri) atau file __i / _ia. Bisakah Anda berbagi info lebih lanjut tentang ini?
Digikata
1
@digikata Saya menggunakan opsi dari dalam IDE untuk menghasilkan file batch. Ini dijelaskan dalam dokumentasi Keil. Ada juga metode command line driven yang dijelaskan di sini , tapi saya kesulitan mendapatkan output konsol yang tepat dari perintah itu. Metode kedua memulai proses baru dan memberi Anda opsi untuk menyalin jendela output ke file output - bukan metode yang baik untuk membangun server.
rmaVT
Untuk referensi di masa mendatang, ruang lingkup pertanyaan ini adalah di area tumpang tindih yang kami bagikan dengan situs Stack Exchange lainnya. Pertanyaan tentang toolchain khusus yang tertanam seperti Keil pasti diterima di sini! Mereka juga disambut di Stack Overflow , tetapi jangan ragu untuk bertanya di kedua tempat.
Kevin Vermeer
1
@KevinVermeer - Ya, saya sendiri akan mengatakan hal yang sama. rmaVT, Anda mungkin menemukan menelusuri pertanyaan yang ditandai "keil" di SO sama mendidiknya dengan pertanyaan yang ditandai "keil" di EE SE .
davidcary

Jawaban:

8

Ini adalah metode terbaik yang saya buat baru-baru ini:

Dalam opsi pembuatan, pilih buat file batch.

Ketika Anda memulai membangun dari IDE, file batch bersama dengan beberapa file teks dibuat berdasarkan opsi yang diatur dalam IDE. Anda perlu melacak file yang dihasilkan IDE ini dalam kontrol sumber:

  • *.kelelawar
  • * .ini
  • *.__saya
  • * ._besaran
  • * .lnp
  • * .sct

Kemudian foo.bat dapat diluncurkan dari skrip build.

Meskipun ini membuat file tambahan yang perlu dilacak dalam kontrol sumber jika Anda ingin membangun dengan andal dari file batch yang dihasilkan, itu menghapus kebutuhan untuk bergantung pada file proyek Keil (foo.uvproj) dan IDE. Saya merasa lebih mudah untuk membandingkan perbedaan, dan dengan demikian melacak perubahan, ke file teks yang dihasilkan (* .__ i) yang berisi flag kompiler daripada file .uvproj. Selain itu, file batch memanggil berbagai alat, armasm, armcc, armlink, secara langsung. Ini memberi Anda hasil langsung dari setiap langkah tersebut serta potensi yang tampaknya lebih baik untuk memigrasi proyek ke rantai alat yang berbeda di masa depan jika perlu.

Saya menyadari jawaban ini sangat mirip dengan pertanyaan awal saya, tetapi saya benar-benar tidak tahu cara yang lebih baik untuk menjalankan pembuatan skrip dengan alat Keil. Saya bertanya untuk melihat apa yang mungkin muncul dari orang lain. Saya tidak sepenuhnya tidak setuju dengan jawaban dari @digikata, tetapi saya lebih suka memiliki flag kompiler dan peta memori dalam format yang lebih mudah untuk dilacak dan menggunakan lebih banyak alat unix-style untuk kompilasi daripada meluncurkan kompilasi all-in-one dengan IDE. Saya pikir kompilasi all-in-one dari IDE bekerja dengan baik di workstation saya, tetapi tidak untuk server build.

EDIT : Server build berjalan pada Windows Server 2003. Saya harus mengakui bahwa saya telah mengalah untuk menggunakan antarmuka baris perintah IDE daripada file batch. Ini menjadi terlalu sulit untuk dikelola.

rmaVT
sumber
Pertanyaan tentang pekerjaan ini - sistem operasi apa yang sedang dijalankan oleh server build Anda? Linux, Windows 7, Windows Server 2003, Windows Server 2008?
CrimsonX
Terima kasih telah menjawab pertanyaan! Sepertinya arm toolchain berfungsi pada Windows Server 2003 & 2008 R2 per Dokumentasi Keil . Pertanyaan tindak lanjut mengenai hasil edit Anda: Bagaimana Anda menangani perubahan pada file uvproj (mis. Menambahkan file baru ke dalam proyek untuk kompilasi)? Apakah Anda harus mengubah opsi kompilasi secara manual dalam file yang dipromosikan ke server build?
CrimsonX
Anda harus meletakkan file .uvproj di bawah kendali sumber. Ini berfungsi cukup baik, meskipun beberapa preferensi pengguna masih tertinggal di dalam file meskipun .userxxxxx file yang juga dihasilkan. Build server hanya perlu membuka "proyek" yang sama dan membangunnya.
rmaVT
3

Saya memanggil IDE Keil melalui baris perintah untuk membangun (bukan file batch yang dihasilkan) dari dalam Makefile. Biasanya ini bekerja lebih baik untuk mengunci file proyek melalui SCM, atau mengambil salinan referensi membangun mengganti nama nama proyek yang relevan ketika melakukan ini.

IDE sangat senang bekerja dengan file proyek read-only, jadi jika Anda menguncinya, yang menjengkelkan adalah Anda harus membuka kuncinya untuk mengubah pengaturan, menyimpan, dan memeriksanya kembali. Jika Anda cukup stabil titik dalam proyek ini cukup kecil - bahkan diinginkan.

Jika Anda mengambil salinan referensi, maka bangunan cenderung rusak ketika pengaturan proyek berubah - terutama karena file proyek ditambahkan atau dihapus dari kompilasi. Menangkap perubahan tersebut secara jelas tidak selalu buruk, tetapi merupakan langkah ekstra yang diperlukan untuk mempertahankan build.

Either way, mengarahkan output ke file log melalui opsi "-o" memungkinkan Anda mengakses log output penuh. Log tidak keluar satu baris pada satu waktu, tetapi tampaknya semua ada di sana. (Saya sebenarnya mem-parsing format kesalahan Keil ke GNU fmt untuk diintegrasikan dengan lingkungan gerhana CDT. Ini memungkinkan saya langsung beralih ke kesalahan / peringatan setelah pembuatan)

Membangun baris perintah juga menghasilkan file __i, __ia sehingga mereka tidak perlu masuk ke kontrol versi untuk server build.

Semoga ini membantu.

Digikata
sumber