اضطر جميعنا أو جميعنا تقريبًا (وإذا لم تكن محظوظًا) إلى تجميع برنامج من الكود المصدري. في الواقع ، في معظم المشاريع ، يكفي إجراء تثبيت ./configure && make && install لتثبيت البرنامج ، لكن دعنا نرى البدائل المختلفة:
صنع غنو
GNU Make هو نظام بناء منخفض المستوى ، يتم تكوين القليل من الأشياء ولا يتم إجراء أي اختبارات:
الايجابيات:
- منتشر جدا
- سهل الفهم
- سريع
سلبيات:
- شكلي قليلا
- من الصعب صيانتها
- لا تجري الاختبارات
make
صنع BSD
يعد BSD Make إصدارًا آخر من Make تستخدمه حاليًا أنظمة التشغيل * BSD. إنه يختلف في GNU Make كونه BSD اجعله أكثر شمولاً في الوظائف على الرغم من أنه أقل انتشارًا.
الايجابيات:
- سريع
- سهل الفهم
- ميزات أكثر من GNU Make
سلبيات:
- غير منتشر في عالم Linux
- لا تجري الاختبارات
- شكلي قليلا
- من الصعب صيانتها
make
أدوات آلية
Autotools هو نظام GNU الرسمي ويقوم بإنشاء نص برمجي يسمى التكوين الذي يجب أن نستدعيه لإنشاء ملف GNU Make Makefile المقابل. يتم استخدامه على نطاق واسع ، ومع ذلك ، يعتقد المزيد والمزيد من الناس (بمن فيهم أنا) أنه مرهق للغاية وصعب وبطيء وغير متوافق للغاية.
الايجابيات:
- شكلي للغاية
- منتشر جدا
سلبيات:
- إمكانية نقل ضعيفة بين أنظمة غير UNIX
- قم بإجراء العديد من الاختبارات (تحقق من كل شيء ، وكل شيء هو كل شيء)
- بطيء جدًا عند التكوين
- التوافق السيئ مع الإصدارات السابقة
./configure && make
CMake
(نظامي المفضل) CMake هو نظام يأتي لتعويض أوجه القصور في Autotools في العديد من الجوانب ، مثل التوافق الرهيب مع الإصدارات السابقة وإمكانية النقل. أيضًا تحسين نظام الاختبار القابل للتكوين بدرجة عالية لتلبية احتياجات كل مشروع. الحقيقة هي أن المزيد والمزيد من المشاريع تستخدم CMake مثل KDE و PortAudio و Ogre3D وما إلى ذلك. يمكننا التعرف على هذا النوع من الأنظمة بفضل ملف CMakeLists.txt الذي سينشئ ملف Makefile أو مشروعًا لـ Eclipse أو CodeBlocks
الايجابيات:
- سريع
- دعم كبير عبر الأنظمة الأساسية
- يمكن تعريف الاختبارات بطريقة قابلة للتخصيص للغاية
سلبيات:
- يصعب فهمه في البداية
- عليك أن تتعامل مع فكرة مجردة قد تكون مخيفة في البداية.
- امتد قليلا على الرغم من أنه شيئا فشيئا سوف يكون أكثر
cmake . && make
س جعل
QMake هو نظام صممه Trolltech لتجميع المشاريع التي تم إنشاؤها في Qt. وبالتالي ، يركز qmake كثيرًا على Qt وغالبًا ما يكون التنسيق المستخدم بواسطة IDEs مثل QtCreator. إنه شائع جدًا في مشاريع Qt ولكنه غير موجود خارج هذه البيئة:
الايجابيات:
- متكامل بشكل جيد مع Qt
- سريع
- منصة جيدة داخل كيو تي
سلبيات:
- غير مألوف خارج تطبيقات Qt
qmake . && make
سلبيات
SCons هو نظام قائم على Python لتجميع مشاريع C / C ++. على عكس Autotools ، CMake أو QMake ؛ لا تقوم SCons ببناء ملف Makefile. SCons قابلة للتعديل للغاية ولكنها ربما تكون الأبطأ في العمليات البسيطة
الايجابيات:
- تعديل سهل
- خذ الاختبارات العادلة
سلبيات:
- انتشار ضئيل
- بطيء
scons
دفعة. جام
Boost.Jam هو إصدار من Perforce Jam يتم استخدامه في مكتبات C ++ Boost الشهيرة ، على الرغم من أنه يمكن استخدام نظام الإنشاء بشكل منفصل. بخلاف GNU Make ، يستخدم Boost.Jam Jamfiles ، وهي نسخة محسنة من Makefiles. تحظى بشعبية كبيرة في بيئة BeOS / Zeta / Haiku.
الايجابيات:
- سريع
- الأقصر في الكتابة
سلبيات:
- انتشار ضئيل
- صعوبة إجراء الاختبارات
bjam
النينجا
Ninja هو نظام تم تطويره بواسطة Google لتوفير نظام بناء فائق السرعة تم تصميمه في الأصل ليكون هو نظام مشروع Chromium. لم يتم تصميم Ninja ليكون سهل التعديل ، وفقًا لمؤلفيه ، يجب البحث عن نظام يولد Ninja. الموصى بها هي CMake و gyp.
الايجابيات:
- موي رابيدو
سلبيات:
- أنت بحاجة إلى نظام آخر لنشر Ninja
- انتشار ضئيل
ninja
آخرون
يمكنك استخدام أي نظام آخر مثل برنامج Bash أو Python الخاص بك. هناك أيضًا مولدات للغات أخرى غير أصلية يمكن استخدامها مثل Gradle و Maven و gyp وما إلى ذلك.
Make ليس نظام تجميع ، إنه مولد للثنائيات (أو الأهداف) من كود المصدر الخاص به. يمكن استخدامه أيضًا كعداء للمهام.
أختلف معك في أن عمل BSD أوسع في الوظائف ، وصنع GNU أكثر اكتمالًا ، وله وظائف أكثر. وأنا أقول هذا من تجربتي الخاصة ، في BSD يجب أن أقوم دائمًا بتثبيت GNU make لأن صنع BSD بسيط جدًا مقارنة بصنع GNU.
أتفق معك في أن Autotools مرهقة للغاية ، وأنا أفضل استخدام Makefile فقط. من الصعب تصحيح ملفات Makefiles التي تم إنشاؤها بواسطة Autotools.
تحيات!
شكرا لتعليق!
في رأيي ، لطالما كان تصميم GNU أكثر تقليدية وإخلاصًا لبرنامج الصنع الأصلي ، وكان تصميم BSD دائمًا أكثر إبداعًا ، لكن ربما لاحظت أشياء أخرى عند إجراء المقارنة.
الأدوات الآلية هي حقًا صداع كبير. كمساهم في نظام التشغيل Haiku ، كان عليّ أن أقوم بنقل البرامج باستخدام أدوات آلية وهذا أمر رائع. ليس هناك عدد قليل من الحالات التي انتهى بي الأمر فيها إلى إنشاء Makefile أو CMakeLists.txt قبل إصلاح هذه الفوضى.
أنا أستخدم حاليًا Premake4 ، وهي قابلة للتكوين للغاية وبسيطة استنادًا إلى البرامج النصية Lua. ألقِ نظرة إذا كنت لا تعرف ذلك.
تهانينا على المقال ، مرجع بسيط ومختصر ممتاز.
يتم استخدام "make check" للتحقق من التجميع بعد استخدام make
تحية طيبة