อะไรคือความแตกต่างระหว่าง Autotools, Cmake และ Scons?
อะไรคือความแตกต่างระหว่าง Autotools, Cmake และ Scons?
คำตอบ:
ในความเป็นจริง Autotools 'เพียง' ประหยัด 'ที่แท้จริงเท่านั้นก็คือมันเป็นสิ่งที่โครงการ GNU ทั้งหมดใช้เป็นส่วนใหญ่
ปัญหาเกี่ยวกับ Autotools:
มันใช้งานได้ ... ส่วนใหญ่แล้ว ... คือทั้งหมดที่คุณสามารถพูดเกี่ยวกับ Autotools มันเป็นระบบที่แก้ปัญหาต่าง ๆ ที่เกี่ยวข้องกับโครงการ GNU จริง ๆ เท่านั้น ... สำหรับรหัสหลัก toolchain หลักของพวกเขา (แก้ไข (05/24/2014): ควรสังเกตว่าข้อกังวลประเภทนี้เป็นสิ่งที่ไม่ดีที่อาจเป็นกังวลเกี่ยวกับ - Heartbleed บางส่วนเกิดจากความคิดนี้และด้วยระบบที่ถูกต้องและทันสมัยคุณจริงๆไม่มีธุรกิจใดเกี่ยวข้องกับ Autotools ที่แก้ไขให้ถูกต้อง GNU อาจจำเป็นต้องทำการลบ cruft ของ codebase เนื่องจากสิ่งที่เกิดขึ้นกับ Heartbleed) คุณสามารถใช้มันเพื่อทำโครงการของคุณและมันอาจทำงานได้ดีสำหรับโครงการขนาดเล็กที่คุณไม่คาดหวังว่าจะทำงานได้ทุกที่ยกเว้น Linux หรือที่ไหน toolchain ของ GNU ทำงานอย่างถูกต้องอย่างชัดเจน คำสั่งว่า "บูรณาการอย่างกับลินุกซ์" เป็นค่อนข้างงบหนาและค่อนข้างไม่ถูกต้อง มันทำงานร่วมกับเครื่องมือของ GNU ได้ดีพอสมควรและแก้ปัญหาที่ไอทีมีกับเป้าหมาย
นี่ไม่ใช่การบอกว่าไม่มีปัญหากับตัวเลือกอื่น ๆ ที่กล่าวถึงในเธรดที่นี่
SCons เป็นสิ่งทดแทนสำหรับ Make / GMake / etc และดูดีสวยทุกสิ่งถือว่าเป็นอย่างไร ...
ตัวอย่างที่ให้สำหรับ CMake ในเธรดนี้เป็นบิตปลอม
อย่างไรก็ตาม ...
ในความจริงแล้วเป้าหมายของคุณควรกำหนดสิ่งที่คุณเลือกที่นี่
มีเหตุผลหลายโครงการหลายโครงการกำลังทำ qmake, Autotools และย้ายไปที่ CMake จนถึงตอนนี้ฉันสามารถคาดหวังได้อย่างชัดเจนว่าโครงการที่ใช้ CMake จะตกอยู่ในสถานการณ์การคอมไพล์หรือบนการตั้งค่า VisualStudio หรือเพียงแค่ต้องทำความสะอาดเล็กน้อยเพราะโครงการไม่ได้มีเฉพาะส่วน Windows หรือ OSX เท่านั้น ไปยัง codebase ฉันไม่สามารถคาดหวังจริงๆจาก scons ที่ตามโครงงานและผมคาดหวังอย่างเต็มที่ 1/3 หรือมากกว่าโครงการ Autotools ที่จะได้รับบางสิ่งบางอย่างที่ไม่ถูกต้องที่ติ๊ดมันสร้างที่เหมาะสมกับบริบทใด ๆ ยกเว้นโฮสต์อาคารหนึ่งหรือ Scratchbox2 หนึ่ง
ความแตกต่างที่สำคัญจะต้องทำระหว่างผู้ที่ใช้เครื่องมือ Cmake เป็นเครื่องมือที่ผู้ใช้จะต้องใช้เมื่อสร้างซอฟต์แวร์ เครื่องมืออัตโนมัติใช้เพื่อสร้าง tarball การแจกจ่ายที่สามารถใช้สร้างซอฟต์แวร์โดยใช้เครื่องมือมาตรฐานที่มีอยู่ในระบบที่สอดคล้องกับ SuS เท่านั้น ในคำอื่น ๆ หากคุณติดตั้งซอฟต์แวร์จาก tarball ที่ถูกสร้างขึ้นโดยใช้ autotools ที่คุณไม่ได้ใช้ autotools ในทางกลับกันถ้าคุณกำลังติดตั้งซอฟต์แวร์ที่ใช้ Cmake แสดงว่าคุณกำลังใช้ Cmake และต้องติดตั้งเพื่อสร้างซอฟต์แวร์
ผู้ใช้ส่วนใหญ่ไม่จำเป็นต้องติดตั้งระบบอัตโนมัติในกล่อง ในอดีตมีความสับสนเกิดขึ้นเนื่องจากนักพัฒนาซอฟต์แวร์จำนวนมากแจกจ่าย tarballs ที่มีรูปแบบไม่ถูกต้องซึ่งบังคับให้ผู้ใช้เรียกใช้ autoconf เพื่อสร้างสคริปต์การกำหนดค่าใหม่และนี่เป็นข้อผิดพลาดของบรรจุภัณฑ์ ความสับสนที่เพิ่มขึ้นนั้นเกิดจากความจริงที่ว่าการแจกแจงลินุกซ์ที่สำคัญส่วนใหญ่ติดตั้ง autotools หลายรุ่นเมื่อพวกเขาไม่ควรติดตั้งใด ๆ ของพวกเขาโดยค่าเริ่มต้น ความสับสนที่มากขึ้นนั้นเกิดจากนักพัฒนาที่พยายามใช้ระบบควบคุมเวอร์ชัน (เช่น cvs, git, svn) เพื่อแจกจ่ายซอฟต์แวร์ของพวกเขาแทนที่จะสร้าง tarballs
asciidoc
หรือhelp2man
หรือdoxygen
หรือที่สำคัญชุดค่าผสมอัตโนมัติที่ถูกต้อง นี่เป็นปัญหาด้านการตลาดอย่างมากสำหรับเครื่องมืออัตโนมัติ ผู้ใช้คิดผิดว่าพวกเขาต้องการติดตั้ง autoconf เพราะพวกเขาไม่เข้าใจความแตกต่างระหว่าง tarball และ VCS
มันไม่เกี่ยวกับมาตรฐานการเข้ารหัสของ GNU
ประโยชน์ปัจจุบันของเครื่องมืออัตโนมัติ - โดยเฉพาะเมื่อใช้กับ automake คือการรวมเข้ากับการสร้างการกระจาย Linux ได้ดีมาก
ด้วย cmake เป็นต้นมันคือ "เคยเป็น -DCMAKE_CFLAGS หรือ -DCMAKE_C_FLAGS ที่ฉันต้องการหรือไม่" ไม่มันไม่ใช่ "-DCMAKE_C_FLAGS_RELEASE" หรือ -DCMAKE_C_FLAGS_DEBUG มันสับสน - ใน autoconf เป็นเพียง. / config CFLAGS = "- O0 -ggdb3" และคุณมีมัน
ในการบูรณาการกับการสร้างโครงสร้างพื้นฐาน scons มีปัญหาที่คุณไม่สามารถใช้make %{?_smp_mflags}
, _smp_mflags
ในกรณีนี้เป็นแมโคร RPM ว่าประมาณขยาย (ผู้ดูแลระบบสามารถกำหนดได้) ระบบไฟฟ้า คนใส่สิ่งต่าง ๆ เช่น -jNCPUS ที่นี่ผ่านสภาพแวดล้อม ด้วยสคอนที่ไม่ทำงานดังนั้นแพ็กเกจที่ใช้สก็อตอาจได้รับซีเรียลต่อเนื่องในตัวเท่านั้น
./configure CFLAGS=-O0
ล้มเหลวบ่อยครั้งด้วยแพ็คเกจที่เขียนทับ CFLAGS ใน makefile และต้องการให้ผู้ใช้รัน./configure --enable-debug
แทน (เช่นtmux
)
สิ่งสำคัญที่ต้องรู้เกี่ยวกับ Autotools คือพวกเขาไม่ใช่ระบบสร้างทั่วไป - พวกเขาใช้มาตรฐานการเข้ารหัสของ GNU และไม่มีอะไรอื่น หากคุณต้องการสร้างแพ็คเกจที่เป็นไปตามมาตรฐาน GNU ทั้งหมด Autotools เป็นเครื่องมือที่ยอดเยี่ยมสำหรับงาน หากคุณไม่ทำเช่นนั้นคุณควรใช้ Scons หรือ CMake (ตัวอย่างเช่นดูคำถามนี้) ความเข้าใจผิดที่พบบ่อยนี้เป็นที่มาของความคับข้องใจกับ Autotools ส่วนใหญ่มาจาก
AUTOMAKE_OPTIONS = -foreign
Makefile.am
(หรือ-foreign
ในของคุณautogen.sh
ฉันคิดว่าเกือบทุกคนใช้สิ่งนี้)
installcheck
distclean
หากคุณพยายามที่จะเปลี่ยนพฤติกรรมแบบนั้นในขณะที่ยังใช้ Autotools อยู่แสดงว่าคุณกำลังเสียเวลา
ในขณะที่จากมุมมองของนักพัฒนา CMake เป็นเครื่องมือที่ใช้งานง่ายที่สุดในขณะนี้จากมุมมองของผู้ใช้ autotools มีข้อดีอย่างหนึ่ง
autotools สร้างไฟล์เดียวกำหนดค่าสคริปต์และไฟล์ทั้งหมดเพื่อสร้างมันมาพร้อมกับการกระจาย มันง่ายต่อการเข้าใจและแก้ไขด้วยความช่วยเหลือของ grep / sed / awk / vi เปรียบเทียบสิ่งนี้กับ Cmake ที่พบไฟล์จำนวนมากใน / usr / share / cmak * / Modules ซึ่งผู้ใช้ไม่สามารถแก้ไขได้เว้นแต่เขาจะมีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบ
ดังนั้นหากบางสิ่งบางอย่างใช้งานไม่ได้ก็มักจะ "แก้ไข" ได้ง่ายโดยใช้เครื่องมือ Standard Unix (grep / sed / awk / vi ฯลฯ ) ในแบบค้อนขนาดใหญ่โดยไม่ต้องเข้าใจระบบ builds
คุณเคยขุดไดเรกทอรีสร้าง cmake ของคุณเพื่อค้นหาว่ามีอะไรผิดปกติหรือไม่? เมื่อเทียบกับ shellscript อย่างง่ายซึ่งสามารถอ่านได้จากบนลงล่างตามไฟล์ Cmake ที่สร้างขึ้นเพื่อค้นหาว่าเกิดอะไรขึ้นเป็นเรื่องยาก นอกจากนี้เมื่อใช้ CMake การปรับไฟล์ FindFoo.cmake ไม่เพียง แต่ต้องมีความรู้เกี่ยวกับภาษา CMake เท่านั้น แต่ยังอาจต้องใช้สิทธิ์ผู้ใช้ขั้นสูงอีกด้วย