ความแตกต่างระหว่าง "ทำความสะอาด" และ "สร้างความไม่สะอาด"


25

ฉันติดตั้ง ffmpeg จากแหล่งต่าง ๆ ด้วยความช่วยเหลือในหน้านี้ https://trac.ffmpeg.org/wiki/CentosCompilationGuide

ฉันสังเกตเห็นว่าส่วนใหญ่ของบทช่วยสอนนี้เรียกร้องmake distcleanหลังจากmake installนั้น แต่มีเพียงการโทร libvpx make cleanหลังจากติดตั้ง

ตามเอกสารนี้ http://www.gnu.org/software/automake/manual/automake.html#Clean make cleanลบไฟล์ทั้งหมดที่makeสร้างขึ้นและmake distcleanลบไฟล์ทั้งหมดที่./configureสร้างขึ้น

ทำความสะอาด

ลบจาก build tree ซึ่งไฟล์ที่สร้างโดย make ทั้งหมด

ทำให้เสียโฉม

นอกจากนี้จะลบสิ่งใด ๆ . / การกำหนดค่าที่สร้างขึ้น

ฉันเข้าใจว่าmake distcleanถูกเรียกใช้สำหรับการติดตั้งครั้งต่อไป แต่ฉันไม่สามารถเข้าใจได้ว่าเหตุใดจึงmake cleanเรียกใช้หลังจากการติดตั้ง

ffmpeg ที่ติดตั้งทำงานได้โดยไม่มีปัญหา ดังนั้นฉันจึงถามคำถามนี้เพราะฉันต้องการพัฒนาความรู้เกี่ยวกับ linux เท่านั้น มันจะมีประโยชน์มากที่มีคนให้คำอธิบายแก่ฉัน


2
Make clean ถูกเรียกใช้หลังการติดตั้งเพื่อล้างค่า ไม่จำเป็นต้องเก็บเวอร์ชันที่คอมไพล์ในไดเร็กทอรีที่คุณคอมไพล์ถ้าคุณยังมีทั้งซอร์ส (และสามารถสร้างใหม่ได้) และโปรแกรมที่ติดตั้ง
Hennes

คำตอบ:


27

พารามิเตอร์ที่ใช้หลังจากmakeเป็นเพียงขึ้นอยู่กับนักพัฒนา (s) Makefileผู้เขียน เอกสารที่อ้างอิงในภายหลัง Autotools Makefileเป็นเพียงหนึ่งในหลายวิธีที่จะสร้าง

มาตรฐานทั่วไปคือmake cleanจะลบไฟล์กลางทั้งหมดและmake distcleanทำให้ต้นไม้ในแบบที่มันเคยเป็นเมื่อมันถูกยกเลิกการ tarred (หรือบางสิ่งบางอย่างที่ใกล้เคียงกัน) รวมถึงการลบออกสคริปต์กำหนดค่า นี่คือวิธีที่เคอร์เนล Linux ทำงานเป็นตัวอย่าง

กล่าวอีกนัยหนึ่งมันขึ้นอยู่กับผู้พัฒนาห้องสมุดแต่ละแห่งและนี่คือเหตุผลว่าทำไมบางcleanครั้งมันถึงdistcleanเวลา โดยวิธีการที่คุณไม่จำเป็นต้องเรียกใช้clean/ distclean- ฉันคิดว่าพวกเขามีคุณใช้มันเพียงเพื่อประหยัดพื้นที่ดิสก์ make installมักจะคัดลอกไฟล์ไปยังไดเรกทอรีปลายทาง (ขึ้นอยู่กับผู้พัฒนาอีกครั้ง) - โดยทั่วไปแล้วสถานที่เช่น/usr/libหรือ/usr/bin(กำหนดโดยสคริปต์กำหนดค่าหากเป็นระบบสร้าง Autotools)

ความแตกต่างเหล่านี้เป็นเหตุผลหลักที่ผู้คนใช้ระบบการจัดการแพ็คเกจเช่น RPM หรือแพ็คเกจ Debian


เหตุผลหลักที่ผู้คนใช้แพ็คเกจไบนารี? สิ่งที่เกี่ยวกับการประหยัดเวลา
x-yuri

6

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

ใช้ตัวอย่างนี้ด้วยffmpegรหัสปัจจุบัน:

  • หลังจากโคลนgitrepo แหล่งที่มาใช้เวลา 53 160 kB
  • หลังจากการกำหนดค่าการรันคือ 53 632 kB
  • หลังจากรวบรวมเรามีค่าเริ่มต้นมากกว่า 10 เท่า: 673 668 kB
  • make clean ลดสิ่งนี้ลงเหลือ 53 636 kB
  • และในที่สุดหลังจากmake distcleanเราใกล้ถึงระดับที่เหมาะสมหลังจากการโคลน: 53 188 kB

2

เหตุใดขั้นตอน libvpx จึงใช้make cleanแทนmake distclean

ในขณะที่เขียนคำแนะนำ libvpx ไม่มีกฎMakefileสำหรับเป้าหมายdistcleanดังนั้นจึงcleanใช้แทน

ทำไมmake (dist)cleanรวมหลังจากmake install

make distclean/ make cleanถูกรวมไว้หลังmake installมาตรการป้องกันไว้ล่วงหน้าเพื่อจัดเตรียม "กระดานชนวนสะอาด" สำหรับผู้ใช้ที่ย้อนกลับเปลี่ยนตัวเลือกกำหนดค่าและรวบรวมใหม่ (ซึ่งเกิดขึ้นบ่อยกว่าที่คาดไว้)

ในคู่มือการคอมไพล์รุ่นก่อนหน้าโดยไม่มีการป้องกันmake distcleanผู้ใช้เหล่านี้จะพบผลลัพธ์ที่ไม่คาดคิด

เกิดอะไรขึ้นถ้าmake distclean/ make cleanให้ข้อผิดพลาด?

อย่างนี้:

Makefile:198: Makefile: No such file or directory
make: *** No rule to make target '/tests/Makefile'.  Stop.

หรือสิ่งนี้:

make: *** No rule to make target 'distclean'.  Stop.

ไม่ต้องสนใจมัน มันหมายความว่าคุณมีโอกาสวิ่งmake distcleanสองครั้งซึ่งไม่เป็นอันตราย


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