คำถามติดแท็ก build-system

Build Systems คือเครื่องมือที่ใช้ในการรวบรวมซอร์สโค้ดและการประกอบ / บรรจุผลลัพธ์


6
ทำไมจึงไม่ใช้จาวาเป็นภาษาสำหรับสร้าง?
ต้องการปรับปรุงโพสต์นี้หรือไม่? ให้คำตอบโดยละเอียดสำหรับคำถามนี้รวมถึงการอ้างอิงและคำอธิบายว่าทำไมคำตอบของคุณถึงถูกต้อง คำตอบที่ไม่มีรายละเอียดเพียงพออาจแก้ไขหรือลบออกได้ หาก Java เป็นภาษาที่ใช้โดยทั่วไปและการสร้างโปรแกรมเป็นสิ่งที่สามารถอธิบายได้โดยใช้ภาษา Java ทำไมจึงไม่ใช่วิธีที่ดีที่สุดในการเขียนไฟล์บิลด์และเราใช้เครื่องมือเช่น Ant, Maven และ Gradle แทน มันจะไม่ตรงไปตรงมามากกว่านี้และยังไม่จำเป็นต้องเรียนรู้ภาษาการเขียนโปรแกรมอีกด้วย (BTW - คำถามนี้สามารถใช้ได้กับภาษาอื่นเช่น C #)
24 java  c#  builds  build-system 

4
CI สามารถใช้สำหรับภาษาที่ตีความได้อย่างไร
ฉันไม่เคยใช้ระบบการรวมต่อเนื่อง (CI) มาก่อน ฉันใช้รหัสเป็นหลักใน MATLAB, Python หรือ PHP ทั้งสองอย่างนี้มีขั้นตอนการสร้างและฉันไม่เห็นว่าจะใช้ CI สำหรับงานของฉันได้อย่างไร เพื่อนในโครงการขนาดใหญ่ใน บริษัท ขนาดใหญ่บอกฉันว่าภาษาไม่สำคัญ ฉันไม่เห็นว่า CI จะเป็นประโยชน์กับฉันอย่างไรหากฉันไม่มีขั้นตอนการสร้าง ฉันคิดว่า CI เป็นสภาพแวดล้อมการทดสอบที่จะเรียกใช้การทดสอบหน่วย ฉันพลาดอะไรไปรึเปล่า?

5
เหตุใดเครื่องมือสร้างจึงใช้ภาษาสคริปต์แตกต่างจากภาษาโปรแกรมพื้นฐาน
ฉันเพิ่งได้ใช้เครื่องมือสร้างบางอย่างสำหรับโครงการ Nodejs ในที่ทำงานเมื่อฉันตระหนักว่าเครื่องมือสร้าง / ระบบหลักของภาษาส่วนใหญ่ใช้ภาษาที่แตกต่างจากภาษาโปรแกรมพื้นฐาน ตัวอย่างเช่นmakeไม่ใช้ C หรือ C ++ เพื่อเขียนสคริปต์และant (หรือ Maven) ไม่ได้ใช้ Java เป็นภาษาสำหรับการเขียนสคริปต์ ภาษาที่ใหม่กว่าอย่าง Ruby ใช้ภาษาเดียวกันเพื่อสร้างเครื่องมือเช่นrakeซึ่งเหมาะสมกับฉัน แต่ทำไมไม่เป็นเช่นนี้เสมอไป? ข้อดีของการมีเครื่องมือสร้างที่ใช้ภาษาต่างจากภาษาต้นแบบคืออะไร

1
Haskell สร้างและสร้างสภาพแวดล้อมที่คล้ายคลึงกับ Maven
ฉันเคยเป็นนักพัฒนา Java มานาน แต่เมื่อเร็ว ๆ นี้ฉันเข้าร่วมทีม Haskell ในโลกของจาวาถ้าคุณมีโครงการขนาดใหญ่โดยมีหลายทีมที่ทำงานอยู่วิธีการทั่วไปคือการใช้เซิร์ฟเวอร์สิ่งประดิษฐ์เช่น Maven เพื่อความสะดวกและรวดเร็วในการพัฒนา เครื่องมือสร้างจำนวนมากเช่น Ant, Maven, Gradle สามารถสร้างโครงการและอัปโหลดไฟล์ jar ไปยังเซิร์ฟเวอร์สิ่งประดิษฐ์ที่สามารถใช้งานโดยส่วนที่เหลือของทีมโดยไม่มีความเจ็บปวด ดังนั้นโดยการแยกโครงการออกเป็นโครงการย่อยขนาดเล็กเวลาสร้างจะลดลงอย่างมาก ในด้านของ Haskell เราใช้cabalเพื่อสร้างโครงการ โครงการของเราใช้เวลาในการสร้างประมาณ 10-15 นาทีโดยไม่มีการเพิ่มประสิทธิภาพ ใช้เวลาสองสามชั่วโมงหากเปิดการปรับแต่งคอมไพเลอร์ซึ่งเป็นเรื่องเจ็บปวด ฉันสงสัยว่าเราจะทำสิ่งเดียวกันกับที่เราทำใน Java ที่นี่ได้อย่างไร มีวิธีง่าย ๆ ในการรวบรวมและอัปโหลดไบนารีของแพ็คเกจ (ไลบรารี) ไปยังเซิร์ฟเวอร์สิ่งประดิษฐ์และใช้ไบนารีที่สร้างไว้ล่วงหน้าในเวลาบิลด์หรือไม่ ฉันรู้ว่าเนื่องจาก Haskell สร้างรหัสเครื่อง (แทนที่จะเป็นรหัสไบต์ใน Java) อาจมีปัญหาความเข้ากันได้ แต่เราอาจมีไบนารีต่างกันสำหรับสถาปัตยกรรม / ระบบปฏิบัติการต่าง ๆ ที่เก็บไว้ในเซิร์ฟเวอร์ส่วน

6
เหตุใด makefiles จึงควรมีเป้าหมาย“ ติดตั้ง”?
มาจากโลกของซีและซี ++ สร้างระบบส่วนใหญ่มีinstallเป้าหมายสะดุดตา Makefiles (ซึ่งจะมีการแนะนำโดย GNUตัวอย่าง) หรือCMake เป้าหมายนี้คัดลอกไฟล์รันไทม์ (ไฟล์เรียกทำงาน, ไลบรารี, ... ) ในระบบปฏิบัติการ (ตัวอย่างเช่นในC:\Program Files\บน Windows) นี่รู้สึกแฮ็คจริงๆเพราะสำหรับฉันมันไม่ใช่ความรับผิดชอบของระบบบิลด์ที่จะติดตั้งโปรแกรม (ซึ่งจริงๆแล้วเป็นความรับผิดชอบของผู้จัดการระบบปฏิบัติการ / ผู้จัดการแพ็คเกจ) นอกจากนี้ยังหมายถึงระบบการสร้างหรือสคริปต์การสร้างจะต้องรู้ว่าองค์กรของโปรแกรมที่ติดตั้งพร้อมกับตัวแปรสภาพแวดล้อมตัวแปรรีจิสทรี, symlink, สิทธิ์ ฯลฯ ที่ดีที่สุดในการสร้างระบบควรจะมีreleaseเป้าหมายที่จะส่งออกโปรแกรมที่ติดตั้ง (ตัวอย่าง.debหรือ.msi) แล้วขอให้ระบบปฏิบัติการเพื่อติดตั้งโปรแกรมที่ make uninstallนอกจากนี้ยังจะช่วยให้ผู้ใช้สามารถถอนการติดตั้งโดยไม่ต้องพิมพ์ ดังนั้นคำถามของฉัน: ทำไมระบบสร้างมักจะแนะนำให้มีinstallเป้าหมาย

4
มันสมเหตุสมผลไหมที่จะเขียน build script ใน C ++?
ฉันใช้ CMake เพื่อสร้างโครงการ IDE / makefiles ของฉัน แต่ฉันยังต้องเรียก "สคริปต์" แบบกำหนดเองเพื่อจัดการไฟล์ที่คอมไพล์ของฉันหรือแม้แต่สร้างรหัส ในโครงการก่อนหน้านี้ฉันใช้ Python และมันก็โอเค แต่ตอนนี้ฉันมีปัญหาร้ายแรงในการจัดการการพึ่งพาจำนวนมากในสองโครงการขนาดใหญ่มากที่ฉันทำงานอยู่ดังนั้นฉันจึงต้องการลดการพึ่งพาทุกที่ มีคนแนะนำฉันให้ใช้ C ++ เพื่อเขียนสคริปต์สร้างของฉันแทนที่จะเพิ่มการพึ่งพาภาษาสำหรับสิ่งนั้น ชุดรูปแบบโครงการใช้ C ++ อยู่แล้วดังนั้นจึงมีข้อดีหลายประการที่ฉันเห็น: ในการสร้างโครงการทั้งหมดจะต้องใช้คอมไพเลอร์ C ++ และ CMake เท่านั้นไม่มีสิ่งอื่นใด (การอ้างอิงอื่น ๆ ทั้งหมดคือ C หรือ C ++) ความปลอดภัยประเภท C ++ (เมื่อใช้ C ++ ที่ทันสมัย) ทำให้ทุกอย่างง่ายขึ้นเพื่อให้ "ถูกต้อง"; เป็นภาษาที่ฉันรู้จักดีกว่าดังนั้นฉันจึงสบายใจได้แม้ว่าฉันจะสามารถเขียนรหัส Python ได้ดีก็ตาม ความเป็นไปได้ที่จะได้รับความเร็วในการประมวลผล (แต่ฉันไม่คิดว่ามันจะเข้าใจได้จริง); อย่างไรก็ตามฉันคิดว่าอาจมีข้อเสียบางอย่างและฉันไม่แน่ใจเกี่ยวกับผลกระทบที่แท้จริงเนื่องจากฉันยังไม่ได้ลอง: …

2
ฉันจะเลือกเครื่องมือการรวมอย่างต่อเนื่องได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ฉันพบตารางเปรียบเทียบที่ยอดเยี่ยมนี้สำหรับเซิร์ฟเวอร์การรวมใน Wikipedia แต่ฉันไม่แน่ใจเล็กน้อยว่าจะจัดอันดับเครื่องมืออย่างไรกับความต้องการและความสนใจของฉัน แผนภูมิเองดูเหมือนว่าจะมีกล่องจำนวนมากที่ไม่รู้จักดังนั้นถ้าคุณสามารถอัปเดตใน Wikipedia ได้ก็สามารถทำได้เช่นกัน มีผลิตภัณฑ์ที่มีประสิทธิภาพสูงสุดสองสามอย่างหรือไม่ดังนั้นฉันจึงสามารถ จำกัด ตัวเลือกสี่หรือห้าตัวได้อย่างรวดเร็ว? ผลิตภัณฑ์ใดที่ดูเหมือนจะมีชุมชนผู้ใช้ที่ใหญ่ที่สุดและการปรับปรุงอย่างต่อเนื่องและการรวมเข้ากับเครื่องมือใหม่ ข้อเสนอโอเพ่นซอร์สนั้นดีที่สุดหรือมีเครื่องมือคุณภาพสูงที่สามารถจัดการได้อย่างยอดเยี่ยมสำหรับผู้ใช้คนเดียวที่บ้าน? การใช้ระบบหลายระบบ (เดสก์ท็อปหลักเซิร์ฟเวอร์เครือข่ายในบ้านเท่านั้นภายในเครื่องสมุดบันทึกส่วนตัวและที่ทำงานเครื่องเสมือนหลายเครื่องกระจายอยู่ทั่วทุกแห่ง) จะสร้างปัญหาและวิธีการจัดการได้อย่างไร

2
มีระบบการสร้างใด ๆ ที่รวมเวลางานที่คาดหวังไว้ในกำหนดการหรือไม่
นี่เป็นภาพประกอบคำถามของฉัน: สมมติว่างานสร้างที่ประกอบด้วยงานอิสระ 4 งานที่ชื่อว่า AD D ใช้เวลานานกว่า AC เป็นผลรวม ระบบบิลด์ที่ไม่สามารถรวมเวลางานที่สัมพันธ์กันอาจกำหนดเวลางานดังนี้: --------------------------------------- CPU1: A | C | --------------------------------------- CPU2: B | D | --------------------------------------- ในทางตรงกันข้ามหากตัวกำหนดตารางเวลาทราบความแตกต่างของเวลางานก็อาจเกิดขึ้นกับกำหนดการที่สั้นกว่านี้มาก: --------------------------------------- CPU1: A | B | C | --------------------------------------- CPU2: D | --------------------------------------- คำถามของฉัน: มีระบบการสร้างใด ๆ ที่รวมเวลางานที่คาดหวังไว้ในกำหนดการหรือไม่ งานวิจัยเชิงวิชาการในการสร้างระบบประเภทนี้มีอยู่จริง? ระบบการสร้างเหล่านี้อยู่ที่ไหน (ถ้ามี) ใช้เวลาจากข้อมูล? การวิเคราะห์พฤติกรรมกำหนดเวลาที่รวบรวมในระหว่างการสร้างก่อนหน้า? หากระบบการสร้างดังกล่าวไม่มีอยู่ทำไม? มี gotcha ที่จะทำให้พวกเขาคุ้มค่าน้อยกว่าพวกเขาปรากฏตัวครั้งแรก?

5
หากต้องการรวมเวอร์ชัน git เป็นหมายเลขบิลด์หรือไม่
เพื่อนร่วมงานและฉันได้ผลัดกันโต้วาที / อภิปรายปัญหา / ข้อดีของการรวมรุ่นที่ได้มาจากที่เก็บ git ปัจจุบันในรหัสของเราเมื่อใดก็ตามที่มันสร้าง เราคิดว่าข้อดีคือ: ไม่จำเป็นต้องกังวลเกี่ยวกับข้อผิดพลาดของมนุษย์ในการอัปเดตหมายเลขเวอร์ชัน การตรวจสอบย้อนกลับระหว่างสิ่งที่เราพบในอุปกรณ์และซอร์สโค้ดที่ได้มาจาก ปัญหาที่เกิดขึ้น (สำหรับเรา) รวมถึง: ระบบสร้าง IDE ที่ได้รับ (เช่น MPLABX) สามารถทำให้ยากที่จะทราบว่าจะใส่ hooks ประเภทนี้ไว้ในที่ใด (และมันสามารถจบลงด้วยการทำวิเศษสุด ๆ ในตอนท้าย) ทำงานได้มากขึ้นในการรวมสิ่งนี้เข้ากับ build สคริปต์ / makefiles การเชื่อมต่อกับแนวทางการสร้างเฉพาะ (เช่นถ้าบุคคลหนึ่งสร้างด้วย XCode และ MPLABX อื่น ๆ ) อาจสร้างความประหลาดใจแบบดาวน์สตรีม ดังนั้นเราอยากรู้ว่าที่คนอื่นมีที่ดินในการอภิปรายนี้ มันง่ายมากที่การอภิปรายจะกลายเป็นเรื่องเล็ก มีผู้คนมากมายที่ยืนหยัดในระบบอัตโนมัติตั้งแต่ต้นจนจบแขวนจำนวนงานที่ต้องทำล่วงหน้าและการมีเพศสัมพันธ์ที่สร้างขึ้น และมีอีกหลายคนที่อยู่อีกด้านหนึ่งของการถกเถียงซึ่งเพิ่งทำสิ่งที่ง่ายที่สุดที่ทำงานและอยู่กับความเสี่ยง มีคำตอบที่ให้เหตุผลที่ดีที่สุดที่จะลงจอดบน?
12 c  git  builds  build-system 

2
มีการใช้เธรดจำนวนเท่าใด
เมื่อฉัน (อีกครั้ง) สร้างระบบขนาดใหญ่บนคอมพิวเตอร์เดสก์ท็อป / แล็ปท็อปฉันบอกmakeให้ใช้มากกว่าหนึ่งเธรดเพื่อเร่งความเร็วในการรวบรวมเช่นนี้: $ make -j$[ $K * $C ] ที่$Cควรจะระบุจำนวนแกน (ซึ่งเราสามารถถือว่าเป็นตัวเลขที่มีหนึ่งหลัก) เครื่องมีในขณะที่$Kเป็นสิ่งที่ฉันแตกต่างจาก2ไป4ขึ้นอยู่กับอารมณ์ของฉัน ตัวอย่างเช่นฉันอาจบอกว่าmake -j12ฉันมี 4 แกนระบุว่าmakeจะใช้ถึง 12 กระทู้ เหตุผลของฉันคือถ้าฉันใช้เฉพาะ$Cเธรดแกนจะว่างขณะที่กระบวนการกำลังดึงข้อมูลจากไดรฟ์ แต่ถ้าฉันไม่ จำกัด จำนวนเธรด (เช่นmake -j) ฉันเสี่ยงที่จะเสียเวลาในการสลับบริบท, หน่วยความจำไม่เพียงพอหรือแย่กว่านั้น สมมติว่าเครื่องมี$Mหน่วยความจำกิ๊ก ( $Mอยู่ในอันดับ 10) ดังนั้นฉันสงสัยว่ามีกลยุทธ์ที่จัดตั้งขึ้นเพื่อเลือกจำนวนเธรดที่มีประสิทธิภาพมากที่สุดที่จะเรียกใช้หรือไม่

7
วิธีจัดการกับปัญหาการคอมไพล์โค้ดฐานขนาดใหญ่?
แม้ว่าฉันสามารถเขียนโค้ดได้ แต่ฉันยังไม่มีประสบการณ์ในการทำงานในโครงการขนาดใหญ่ สิ่งที่ฉันทำจนถึงตอนนี้ก็คือการเขียนโปรแกรมขนาดเล็กที่รวบรวมในไม่กี่วินาที (แบบฝึกหัด c / c ++ ต่าง ๆ เช่นอัลกอริทึมหลักการเขียนโปรแกรมแนวคิดแนวความคิดหรือเพียงแค่ลอง api ... ) หรือทำงานในโครงการขนาดเล็กบางโครงการ ทำในภาษาสคริปต์ (python, php, js) โดยไม่จำเป็นต้องรวบรวม สิ่งนี้คือเมื่อโค้ดในภาษาสคริปต์เมื่อใดก็ตามที่ฉันต้องการลองสิ่งที่ใช้ได้ผลฉันแค่เรียกใช้สคริปต์และดูว่าเกิดอะไรขึ้น หากสิ่งต่าง ๆ ไม่ทำงานฉันสามารถเปลี่ยนรหัสและลองใหม่อีกครั้งโดยเรียกใช้สคริปต์อีกครั้งและทำต่อไปเรื่อย ๆ จนกว่าฉันจะได้ผลลัพธ์ตามที่ฉันต้องการ .. ประเด็นของฉันคือคุณไม่ต้องรอ อะไรก็ตามที่จะรวบรวมและเพราะมันค่อนข้างง่ายที่จะใช้ฐานรหัสขนาดใหญ่ดัดแปลงแก้ไขเพิ่มบางอย่างเข้ากับมันหรือเล่นกับมัน - คุณสามารถเห็นการเปลี่ยนแปลงได้ทันที เป็นตัวอย่างฉันจะใช้ Wordpress มันค่อนข้างง่ายที่จะลองและคิดวิธีการสร้างปลั๊กอินสำหรับมัน ก่อนอื่นคุณต้องเริ่มต้นด้วยการสร้างปลั๊กอิน "Hello World" อย่างง่ายจากนั้นคุณสร้างอินเทอร์เฟซที่ง่ายสำหรับผู้ดูแลระบบเพื่อทำความคุ้นเคยกับ API จากนั้นคุณสร้างมันขึ้นมาและทำให้สิ่งที่ซับซ้อนมากขึ้นในเวลาที่เปลี่ยนไป ครั้ง .. ความคิดที่จะต้องคอมไพล์บางสิ่งที่ยิ่งใหญ่เท่า WP ซ้ำแล้วซ้ำอีกหลังจากการเปลี่ยนแปลงเล็กน้อยแต่ละครั้งเพื่อลอง "ถ้ามันได้ผล" และ "การทำงาน / รู้สึกอย่างไร" …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.