Autoconf และ Automake ถูกจัดทำขึ้นเพื่อแก้ปัญหาวิวัฒนาการของ Unix
เมื่อ Unix พัฒนาไปในทิศทางที่ต่างกันนักพัฒนาที่ต้องการโค้ดพกพามักจะเขียนโค้ดดังนี้:
#if RUNNING_ON_BSD
Set things up in the BSD way
#if RUNNING_ON_SYSTEMV
Set things up in the SystemV way
#endif
เนื่องจาก Unix ถูกนำไปใช้ในการใช้งานที่แตกต่างกัน (BSD, SystemV, ผู้จำหน่ายหลายรายและต่อมา Linux และ Unix-like system อื่น ๆ ) มันกลายเป็นเรื่องสำคัญสำหรับนักพัฒนาที่ต้องการเขียนโค้ดพกพาเพื่อเขียนโค้ดที่ไม่ขึ้นอยู่กับยี่ห้อ แต่ขึ้นอยู่กับฟีเจอร์ที่เปิดเผยโดยระบบปฏิบัติการ สิ่งนี้มีความสำคัญเนื่องจากเวอร์ชันของ Unix จะแนะนำคุณสมบัติใหม่เช่นการเรียกใช้ระบบ "ส่ง" และระบบปฏิบัติการอื่น ๆ จะใช้งานในภายหลัง แทนที่จะมีสปาเก็ตตี้ของรหัสที่ตรวจสอบแบรนด์และรุ่นต่างๆนักพัฒนาเริ่มตรวจสอบคุณสมบัติโดยใช้รหัสจึงกลายเป็น:
#if HAVE_SEND
Use Send here
#else
Use something else
#endif
ไฟล์ README ส่วนใหญ่เพื่อคอมไพล์ซอร์สโค้ดย้อนกลับไปในนักพัฒนาซอฟต์แวร์ยุค 90 เพื่อแก้ไขไฟล์ config.h และแสดงความคิดเห็นว่าคุณสมบัติที่เหมาะสมที่มีอยู่ในระบบหรือจะจัดส่งไฟล์ config.h มาตรฐานสำหรับการกำหนดค่าระบบปฏิบัติการแต่ละรายการที่ผ่านการทดสอบแล้ว
กระบวนการนี้มีทั้งความยุ่งยากและเกิดข้อผิดพลาดและนี่คือสิ่งที่ Autoconf เกิดขึ้น คุณควรคิดถึง Autoconf เป็นภาษาที่สร้างขึ้นจากคำสั่งเชลล์ด้วยมาโครพิเศษที่สามารถแทนที่กระบวนการแก้ไขที่เป็นมนุษย์ของ config.h ด้วยเครื่องมือที่ตรวจสอบระบบปฏิบัติการสำหรับการทำงาน
โดยทั่วไปแล้วคุณจะเขียนรหัสการตรวจของคุณในไฟล์ configure.ac แล้วรันคำสั่ง autoconf ซึ่งจะคอมไพล์ไฟล์นี้ไปยังคำสั่งกำหนดค่าที่สามารถเรียกทำงานได้ซึ่งคุณเห็นว่าเคยใช้
ดังนั้นเมื่อคุณเรียกใช้./configure && make
คุณกำลังตรวจสอบคุณสมบัติที่มีอยู่ในระบบของคุณแล้วสร้างไฟล์ปฏิบัติการที่มีการกำหนดค่าที่ตรวจพบ
เมื่อโครงการโอเพ่นซอร์สเริ่มต้นโดยใช้ระบบควบคุมซอร์สโค้ดมันสมเหตุสมผลที่จะตรวจสอบในไฟล์ configure.ac แต่ไม่ใช่ผลลัพธ์ของการคอมไพล์ (กำหนดค่า) autogen.sh เป็นเพียงสคริปต์ขนาดเล็กที่เรียกใช้คอมไพเลอร์ autoconf ด้วยอาร์กิวเมนต์คำสั่งที่เหมาะสมสำหรับคุณ
-
Automake เติบโตขึ้นจากการปฏิบัติที่มีอยู่ในชุมชน โครงการ GNU สร้างมาตรฐานให้กับชุดเป้าหมายปกติสำหรับ Makefiles:
make all
จะสร้างโครงการ
make clean
จะลบไฟล์ที่รวบรวมทั้งหมดจากโครงการ
make install
จะติดตั้งซอฟต์แวร์
- สิ่งที่ต้องการ
make dist
และmake distcheck
จะเตรียมซอร์สสำหรับการแจกจ่ายและตรวจสอบว่าผลลัพธ์นั้นเป็นซอร์สโค้ดแพคเกจที่สมบูรณ์
- และอื่น ๆ ...
การสร้าง makefiles ที่สอดคล้องกับการใช้งานนั้นเป็นภาระเพราะมีจำนวนมากที่ซ้ำกันซ้ำแล้วซ้ำอีก ดังนั้น Automake เป็นคอมไพเลอร์ใหม่ที่รวมเข้ากับ autoconf และประมวลผล "แหล่งที่มา" Makefile's (ชื่อ Makefile.am) ลงใน Makefiles ที่สามารถป้อนให้กับ Autoconf ได้
ห่วงโซ่อัตโนมัติ automake / autoconf ใช้เครื่องมือช่วยเหลืออื่น ๆ เป็นจำนวนมากและมีการเพิ่มส่วนประกอบอื่น ๆ สำหรับงานเฉพาะอื่น ๆ เมื่อความซับซ้อนของการรันคำสั่งเหล่านี้ตามลำดับเพิ่มขึ้นความต้องการสคริปต์พร้อมใช้จึงเกิดขึ้นและนี่คือที่มาของ autogen.sh
เท่าที่ฉันรู้ Gnome เป็นโครงการที่แนะนำการใช้สคริปต์ผู้ช่วยนี้