ฉันจะใช้บิลด์เซิร์ฟเวอร์ด้วย Keil uVision4 (MDK-ARM), สคริปต์บิลด์, ใช้ makefile ได้อย่างไร?


13

ฉันต้องการรันบิลด์รายวันหรือเช็คอิน / คอมมิชชันทริกเกอร์บิลด์ของโครงการที่อิงกับ Keil MDK-ARM จนถึงตอนนี้ฉันได้รับสิ่งที่เกิดขึ้นพร้อมกับคุณสมบัติไฟล์แบทช์ของ IDE สิ่งนี้ต้องการให้คุณสร้างโครงการอย่างน้อยหนึ่งครั้งด้วย IDE จากนั้นเช็คอินไฟล์แบตช์และไฟล์ที่เกี่ยวข้อง.__iและ._iaไฟล์ที่สร้างโดย IDE

นอกจากนี้ IDE ยังใส่ข้อมูลเฉพาะของผู้ใช้จำนวนมากลงในไฟล์แบทช์เช่นตัวแปร Windows PATH สิ่งนี้อาจกลายเป็นปัญหากับนักพัฒนาหลายคนเนื่องจากแบทช์ไฟล์สำหรับการสร้างสามารถเปลี่ยนแปลงได้ในแต่ละการคอมมิทจากนักพัฒนาที่แตกต่างกัน

ท้ายที่สุดคนหนึ่งเพียงแค่ต้องการที่จะติดตามของสวิทช์ต่างๆสำหรับarmcc , armasmและArmLink

มีวิธีการใช้ makefile มาตรฐานมากขึ้นเพื่อสร้างโครงการ Keil uVision หรือไม่? มีวิธีการแปลไฟล์โครงการ uVision เป็นสคริปต์ build ที่ดูแลรักษาได้มากกว่าหรือไม่?


ฉันคิดว่ามันยอดเยี่ยมที่คุณใช้งานเซิร์ฟเวอร์แบบบิลด์ น่าเสียดายที่ฉันไม่มีประสบการณ์กับระบบการพัฒนา Keil ดังนั้นฉันจึงไม่สามารถช่วยคุณได้ ฉันอยากจะแนะนำให้คุณโพสต์วิธีการแก้ปัญหาถ้าคุณเมื่อคุณได้รับมันออกมา
semaj

ฉันสร้างโครงการ Keil ผ่านสคริปต์ชุดงานโดยไม่ต้องพึ่งพา PATH ใด ๆ (นอกเหนือจากเครื่องมือ Keil ด้วยตัวเอง) หรือไฟล์ __i / _ia คุณสามารถแบ่งปันข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนี้ได้ไหม?
Digikata

1
@digikata ฉันใช้ตัวเลือกจากภายใน IDE เพื่อสร้างไฟล์แบตช์ อธิบายไว้ในเอกสารประกอบของ Keil นอกจากนี้ยังมีวิธีการขับเคลื่อนบรรทัดคำสั่งที่อธิบายไว้ที่นี่แต่ฉันมีปัญหาในการรับเอาท์พุทคอนโซลที่เหมาะสมจากคำสั่งนั้น วิธีที่สองเริ่มกระบวนการใหม่และให้ตัวเลือกในการคัดลอกหน้าต่างเอาต์พุตไปยังไฟล์เอาต์พุต - ไม่ใช่วิธีที่ดีสำหรับเซิร์ฟเวอร์บิลด์
rmaVT

สำหรับการอ้างอิงในอนาคตขอบเขตของคำถามนี้อยู่ในพื้นที่ของการทับซ้อนที่เราแบ่งปันกับไซต์ Stack Exchange อื่น ๆ คำถามเกี่ยวกับชุดเครื่องมือเฉพาะแบบฝังอย่าง Keil ยินดีต้อนรับอย่างแน่นอนที่นี่! พวกเขายินดีต้อนรับในStack Overflowด้วย แต่อย่าลังเลที่จะถาม
Kevin Vermeer

1
@KevinVermeer - ใช่ฉันกำลังจะพูดในสิ่งเดียวกันด้วยตัวเอง rmaVT คุณอาจพบการเรียกดูคำถามติดแท็ก "คี" บน SOเช่นเดียวกับการศึกษาเป็นคำถามที่ติดแท็ก "คี" บน EE SE
davidcary

คำตอบ:


8

นี่เป็นวิธีที่ดีที่สุดที่ฉันเพิ่งได้รับเมื่อไม่นานมานี้:

ในตัวเลือกบิลด์ให้เลือกสร้างไฟล์แบตช์

เมื่อคุณเริ่มต้นบิลด์จาก IDE จะมีการสร้างแบตช์ไฟล์พร้อมกับไฟล์ข้อความหลายไฟล์ตามตัวเลือกที่ตั้งค่าไว้ใน IDE คุณต้องติดตามไฟล์ IDE ที่สร้างขึ้นเหล่านี้ในการควบคุมแหล่งที่มา:

  • *.ค้างคาว
  • * .ini
  • *.__ผม
  • * ._ IA
  • * .lnp
  • * .sct

จากนั้น foo.bat สามารถเรียกใช้งานได้จากบิลด์สคริปต์

ในขณะนี้จะสร้างไฟล์พิเศษที่จำเป็นต้องติดตามในการควบคุมแหล่งที่มาหากคุณต้องการสร้างจากแบทช์ไฟล์ที่สร้างขึ้นได้อย่างน่าเชื่อถือ แต่ก็ไม่จำเป็นต้องพึ่งพาไฟล์โครงการ Keil (foo.uvproj) และ IDE ฉันค้นหาเปรียบเทียบความแตกต่างได้ง่ายขึ้นและติดตามการเปลี่ยนแปลงกับไฟล์ข้อความที่สร้างขึ้น (* .__ i) ที่มีค่าสถานะคอมไพเลอร์มากกว่าไฟล์. uvproj นอกจากนี้ไฟล์แบตช์จะเรียกใช้เครื่องมือต่าง ๆ armasm, armcc, armlink โดยตรง สิ่งนี้จะให้ผลลัพธ์โดยตรงของแต่ละขั้นตอนเหล่านั้นรวมถึงโอกาสที่ดีกว่าสำหรับการย้ายโครงการไปยังโซ่เครื่องมือที่แตกต่างกันในอนาคตหากจำเป็น

ฉันรู้ว่าคำตอบนี้ฟังดูเหมือนคำถามเดิม แต่ฉันไม่รู้วิธีที่ดีกว่าในการใช้งานบิลด์สคริปต์ที่มีเครื่องมือของ Keil ฉันขอดูว่าอาจเกิดอะไรขึ้นกับผู้อื่น ฉันไม่เห็นด้วยกับคำตอบจาก @digikata อย่างสมบูรณ์ แต่ฉันต้องการคอมไพเลอร์แฟล็กและแผนที่หน่วยความจำในรูปแบบที่ง่ายขึ้นสำหรับการติดตามและใช้เครื่องมือ unix ในการรวบรวมมากกว่าการเปิดตัวคอมไพล์แบบครบวงจร ด้วย IDE ฉันคิดว่าการรวบรวม all-in-one จาก IDE ทำงานได้ดีที่เวิร์กสเตชันของฉัน แต่ไม่ใช่สำหรับการสร้างเซิร์ฟเวอร์

แก้ไข : บิลด์เซิร์ฟเวอร์ทำงานบน Windows Server 2003 ฉันต้องยอมรับว่าฉันยอมที่จะใช้อินเตอร์เฟสบรรทัดคำสั่ง IDE แทนไฟล์แบตช์ สิ่งนี้ยากที่จะจัดการ


คำถามเกี่ยวกับงานนี้ - ระบบปฏิบัติการเซิร์ฟเวอร์ของคุณทำงานอยู่อะไร? Linux, Windows 7, Windows Server 2003, Windows Server 2008?
CrimsonX

ขอบคุณที่ตอบคำถาม! ดูเหมือนว่าการทำงานของแขน toolchain บน Windows Server 2003 และ 2008 R2 ต่อเอกสารของ Keil คำถามติดตามผลเกี่ยวกับการแก้ไขของคุณ: คุณจะจัดการกับการเปลี่ยนแปลงของไฟล์ uvproj ได้อย่างไร (เช่นการเพิ่มไฟล์ใหม่เข้าไปในโครงการสำหรับการรวบรวม) คุณต้องเปลี่ยนตัวเลือกการคอมไพล์ด้วยตนเองในไฟล์ที่โปรโมตไปที่เซิร์ฟเวอร์การสร้างหรือไม่?
CrimsonX

คุณต้องวางไฟล์. uvproj ภายใต้การควบคุมของแหล่งที่มา วิธีนี้ใช้งานได้ดีแม้ว่าการตั้งค่าของผู้ใช้บางส่วนจะยังคงอยู่ในไฟล์แม้จะมีไฟล์ .userxxxxx ที่สร้างขึ้นเช่นกัน บิลด์เซิร์ฟเวอร์ต้องเปิดโครงการ "เดียวกัน" แล้วสร้างขึ้น
rmaVT

3

ฉันเรียก Keil IDE ผ่านทางบรรทัดคำสั่งเพื่อสร้าง (ไม่ใช่แบตช์ไฟล์ที่สร้าง) จากภายใน Makefile โดยปกติแล้วจะทำงานได้ดีกว่าในการล็อคไฟล์โครงการผ่าน scm หรือใช้สำเนาบิลด์อ้างอิงเปลี่ยนชื่อชื่อโครงการที่เกี่ยวข้องเมื่อทำสิ่งนี้

IDE มีความสุขอย่างสมบูรณ์แบบที่จะทำงานกับไฟล์โครงการแบบอ่านอย่างเดียวดังนั้นหากคุณล็อคไฟล์ลงไปสิ่งที่ไม่พึงประสงค์คือคุณต้องปลดล็อคพวกเขาเพื่อเปลี่ยนการตั้งค่าบันทึกและตรวจสอบกลับมาหากคุณอยู่ในสภาพค่อนข้างเสถียร ประเด็นในโครงการนี้ค่อนข้างน้อย - เป็นที่พึงปรารถนา

หากคุณใช้สำเนาอ้างอิงงานสร้างจึงมีแนวโน้มที่จะแตกเมื่อการตั้งค่าโครงการเปลี่ยนแปลงโดยเฉพาะอย่างยิ่งเมื่อไฟล์โครงการถูกเพิ่มหรือลดลงจากการรวบรวม การจับภาพการเปลี่ยนแปลงเหล่านั้นอย่างชัดเจนนั้นไม่ได้เลวร้ายนัก แต่เป็นขั้นตอนพิเศษที่จำเป็นในการดูแลการสร้าง

ไม่ว่าจะด้วยวิธีใดการเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์บันทึกผ่านตัวเลือก "-o" ช่วยให้คุณเข้าถึงบันทึกผลลัพธ์แบบเต็ม บันทึกไม่ออกมาทีละบรรทัด แต่ดูเหมือนว่าทุกคนอยู่ที่นั่น (จริง ๆ แล้วฉันแยกวิเคราะห์รูปแบบข้อผิดพลาด Keil เป็น GNU fmt สำหรับการรวมกับสภาพแวดล้อม eclipse CDT ซึ่งช่วยให้ฉันข้ามไปยังข้อผิดพลาด / คำเตือนหลังการสร้างได้โดยตรง)

บิลด์ไลน์ของบรรทัดคำสั่งจะสร้างไฟล์ __i, __ia ด้วยดังนั้นผู้ใช้ไม่จำเป็นต้องเข้าสู่การควบคุมเวอร์ชันสำหรับบิลด์เซิร์ฟเวอร์

หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.