ما هي أفضل طريقة لتنظيم كود مشروع C الخاص بي ومكتباته الخارجية؟[مغلق]

StackOverflow https://stackoverflow.com/questions/26964

  •  09-06-2019
  •  | 
  •  

سؤال

لقد بدأت مشروع C جديدًا، والذي يعتمد إلى حد كبير على OSS.سيكون أيضًا على SourceForge، وأود أن أغتنم هذه الفرصة للتعرف على أفضل الممارسات المعمول بها لتنظيم هذا النوع من التعليمات البرمجية.أنا أستخدم مكتبات مثل libcurl وlibz، وسأقوم بتجميعها باستخدام MinGW وMSYS.

سأقوم بتوزيع نسخ من المصدر لجميع المكتبات التي أستخدمها مع مشروعي، لذلك لن يضطر الأشخاص الذين يقومون بتنزيل المصدر إلى البحث عن التبعيات.ما الذي يجب أن أسميه الدليل الذي أقوم بتخزين المكتبات فيه؟وإلى الآن أتردد بين:

  • lib، لأنها مكتبات.ومع ذلك، فإن 'lib' له دلالة مختلفة في عالم UNIX.
  • src، لأنها ملفات مصدر.
  • الطرف الثالث، لأنني لم أكتب ذلك.

وأين يجب أن أقوم بتجميع هذه المكتبات؟هل يجب علي ببساطة تكوينها وتثبيتها على جذر النظام، أم يجب علي إعداد دليل حيث يجب تجميع جميع المكتبات والارتباط من هناك؟من الواضح أن هذا سيكون له تداعيات على ملف Makefile الخاص بي.

كيف يجب أن أفعل هذا؟هل هناك اتفاقيات ثابتة يجب أن أتبعها؟هل هم مكتوبون في مكان ما؟

هل كانت مفيدة؟

المحلول

أولاً، بالنسبة للمكتبات الخارجية سأستخدمها vendor, ، ولكن هذا مجرد تفضيل.

ثانياً، لا أعتقد أن التثبيت فكرة جيدة آخر المكتبات في جذر النظام، دون معرفة المستخدمين.والأهم من ذلك أن هذا سيتعارض مع الإصدارات المثبتة لاحقًا من تلك المكتبات.لذلك أعتقد أن أفضل مكان لهذه المكتبات سيكون في نفس الدليل الذي يوجد به تطبيقك.

يمكنك أيضًا تجميع هذه المكتبات بشكل ثابت في برنامجك.

نصائح أخرى

في مهمة سابقة، كان المعيار هو تثبيتها في دليل يسمى 3rdparty وإنشاء المكتبات هناك (في 3rdparty/LIBNAME/Debug، وما إلى ذلك).

نستخدم شيئًا ما مع اللاحقة _ext أو _EXT (أي MyProject_EXT) للإشارة إلى أنه خارجي لمشروعنا لتخزين الكود المصدري للحزم الخارجية التي نربطها بها.

وأنا أتفق مع بيتر.لا ينبغي أن تكون المكتبات الخارجية مدمجة في جذر النظام لأنها قد تسبب تعارضات.سأقوم بإنشائها في دليلهم ثم تثبيتها في دليل /lib (أو ربما /extlib) الذي يكون فريدًا لتطبيقك وأربطه بهم هناك.

لو سمحت لا قم بشحن مصادر الطرف الثالث مع التعليمات البرمجية الخاصة بك، إما في المصدر أو مرتبطة بشكل ثابت في الثنائيات، أو بأي طريقة أخرى.سيؤدي ذلك إلى التداخل مع النسخ الأخرى منه، ولن يتم تحديثه عندما تحتاج المكتبة إلى الإصلاح.أخبر المستخدم بالمتطلبات (وتابع تغييرات واجهة برمجة التطبيقات في المكتبة!).سيتأكد المستخدم الذي يقوم بالتجميع الذاتي من الحصول على التبعيات، وسيتأكد التوزيع من أن الحزمة الخاصة بك تعمل مع الإصدار الذي يشحنونه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top