มีกฎทั่วไปหรือไม่เมื่อคุณควรใช้ 'ทำให้สะอาด' แทนที่จะ 'ทำ'


11

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

คำตอบ:


17

คุณเรียกใช้ทำความสะอาดในสองสถานการณ์ - เมื่อคุณต้องการจัดทำซอร์สโค้ด (และไม่ต้องการ / ต้องการวัตถุที่มีอยู่) หรือเมื่อคุณมีเหตุผลบางอย่างที่เชื่อว่าวัตถุที่สร้างขึ้นนั้นไม่ดี

ในกรณีของคุณคุณกำลังใช้ 'ทำให้สะอาด' เพื่อแก้ไขปัญหาที่น่าจะเป็นผลมาจาก Makefile buggy บางสิ่งในนั้นไม่ได้รวบรวมใหม่เมื่อมันควรและนั่นทำให้ไบนารีเอาต์พุตไม่ดี

มีสาเหตุหลายประการที่อาจเกิดขึ้นขึ้นอยู่กับความซับซ้อนของโครงการและวิธีที่คุณใช้สร้าง แต่ส่วนสำคัญของมันคือ: คุณต้องใช้เวลาในการดีบัก Makefile


6
คุณลืม "การเปลี่ยนแปลงบางอย่างในสภาพแวดล้อมการสร้าง" เช่นคอมไพเลอร์ที่อัปเกรดแล้วเวอร์ชั่นใหม่ของห้องสมุด ฯลฯ เป็นความคิดที่ดีที่จะ "ทำความสะอาด" ในกรณีเหล่านี้เพียงเพื่อให้แน่ใจว่าโมดูลทั้งหมดกำลังร้องเพลงจากแผ่นเพลงเดียวกัน!
James Anderson

2
@JamesAnderson One อาจแย้งว่านี่เป็นเพียงตัวอย่างของ Makefiles ที่เป็นบั๊กกี้
Kristof Provost

4
@KristofProvost: ฉันไม่แน่ใจว่าฉันจะเรียน "ABI ใหม่" (อาจจะแนะนำรุ่นคอมไพเลอร์ใหม่) เป็น 'buggy Makefile' มันเพียงพอนอกขอบเขตของสิ่งที่ฉันคาดหวังว่า 'ทำให้' ดู
Vatine

1
เป็นจริง แต่เป็นไปได้ (และไม่ใช่แม้แต่เรื่องยากทั้งหมด) ในการเพิ่มคอมไพเลอร์ในไฟล์ make เป็นสิ่งที่จำเป็นต้องมี เพียงพอที่จะรับปัญหา สรุปแล้วมันไม่ใช่ปัญหาใหญ่และหายากมากอยู่ดี ฉันทำประเด็นเพราะฉันใช้ (และเขียน) makefiles ซึ่งใช้ธงคอมไพเลอร์และเช่นนั้นเข้าบัญชี นั่นเป็นเรื่องที่ค่อนข้างแปลกใน makefiles แต่มีประโยชน์มาก (มากกว่าการตรวจสอบคอมไพเลอร์;) ความคาดหวังของฉันเกี่ยวกับ makefiles ที่ดีเขียนได้ดีค่อนข้างสูง ความคาดหวังของฉันเกี่ยวกับmakefile โดยเฉลี่ยนั้นค่อนข้างต่ำกว่า ...
Kristof Provost

8

ฉันเห็นด้วยกับคำตอบของ Michael Kohne โดยทั่วไป ฉันจะเพิ่มคุณต้องอ่านเอกสารการติดตั้งเพื่อทราบว่า "ทำความสะอาด" จริง ๆ แล้วทำอะไร อาจมีระดับการทำความสะอาดที่แตกต่างกันซึ่งคุณอาจจำเป็นต้องใช้เช่น "make realclean" และ "make distclean" มีการประชุมอย่างไม่เป็นทางการสำหรับสิ่งเหล่านี้ แต่ไม่มีสิ่งใดแกะสลักด้วยหิน


2
+1: "คุณต้องอ่านเอกสารการติดตั้งเพื่อทราบว่า" ทำความสะอาด "จริงหรือไม่" ไม่มี "กฎทั่วไป" คุณต้องอ่านเอกสารจริง
S.Lott

5

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


2
ฉันเห็นด้วย. ไม่มีปัญหาอีกต่อไปในวันนี้ที่มีพื้นที่ว่างบนดิสก์เกือบจะไม่สิ้นสุด แต่ฉันแก่แล้วพอที่จะจำได้ว่าเมื่อใดที่ทำความสะอาดและทำให้ผู้ใช้ส่วนใหญ่ถูกใช้เพื่อประหยัดพื้นที่ดิสก์หลังจากสร้างปฏิบัติการที่เชื่อมโยงแล้ว การทำ GCC, apache, perl, etc ทำให้มีของเหลือเฟือมากมาย
Bill Ruppert

1

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


ขึ้นอยู่กับขนาดของโครงการของคุณ ที่ฉันใช้ในการทำงานสร้างที่เพิ่มขึ้นจะใช้เวลา 2-4 ชั่วโมงกับการเปลี่ยนแปลงจากเว็บไซต์อื่น ๆ ที่ดึงมาในชั่วข้ามคืน งานสร้างที่สะอาดอาจใช้เวลา 7 ถึง 9 ชั่วโมง ยิ่งไปกว่านั้นบางครั้งเรามีสาขา 2 หรือ 3 สาขาที่เราต้องการสร้าง แม้แต่บนเครื่องที่เร็วโค้ดฐานที่มีขนาดใหญ่มากก็ยังต้องการการดูแลที่แตกต่างไปจากที่เล็กกว่า
TafT
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.