أين يمكن وضع البرامج النصية المساعدة مع GNU autoconf/automake؟

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

  •  01-07-2019
  •  | 
  •  

سؤال

أنا أعمل على مشروع سيتم توزيعه باستخدام GNU autoconf/automake، ولدي مجموعة من البرامج النصية bash التي تستدعي البرامج النصية awk.أرغب في أن تنتهي نصوص bash في $PATH، لكن ليس في نصوص awk.كيف يمكنني إدراجها في المشروع؟هل يجب وضعها مع الثنائيات الأخرى؟

وأيضًا هل هناك طريقة لتحديد الموقع النهائي للملف بعد التثبيت؟أفترض أن /usr/local/bin ليس كذلك دائماً حيث تنتهي الملفات التنفيذية ...

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

المحلول

أضف شيئًا كهذا إلى Makefile.am

scriptsdir = $(prefix)/bin
scripts_DATA = awkscript1 awkscript2

في هذه الحالة سيتم تثبيت awkscript في $(prefix)/bin (يمكنك أيضًا استخدام $(bindir)).

ملحوظة:لا تنس أنه يجب تسمية الأول باسم + dir (scripts -> scriptsdir) والثاني يجب أن يكون name + _DATA (scripts -> scripts_DATA).

نصائح أخرى

يمكنك فقط إدراج البرامج النصية التي تريد تثبيتها في Makefile.am:

bin_SCRIPTS = foo bar

سيؤدي هذا إلى تثبيت foo وbar أثناء التثبيت.للحصول على المسار إلى موقعهم النهائي، يمكنك استخدام @bindir@ في foo.in والسماح بتكوين build foo نيابةً عنك.على سبيل المثال، في ملفconfig.ac:

AC_CONFIG_FILES([foo bar])

ثم في foo.in:

#!/bin/sh

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
echo bindir = $bindir

ضع في اعتبارك أن الشخص الذي يقوم بتكوينه قد يحدد أيًا من -prefix ، -exec_prefix ، أو -bindir ، ويمكن إعادة التثبيت باستخدام destdir.باستخدام التقنية الموصوفة هنا، لن يتم أخذ DESTDIR في الاعتبار وسيتم تثبيت البرنامج النصي في موقع آخر غير المسار الذي سيتردد فيه.هذا حسب التصميم، وهو السلوك الصحيح، حيث عادةً ما يتم استخدام تثبيت DESTDIR لإنشاء كرة قطران سيتم تفكيكها في النهاية في نظام الملفات بطريقة تجعل الرابط الموجود في البرنامج النصي صالحًا.

جوناثان، ردًا على سؤالك الإضافي:إذا كنت تريد استبدال قيمة البادئة في وقت الإنشاء، فسوف تحتاج إلى:

  1. أعد تسمية البرنامج النصي الخاص بك "myscript" إلى "myscript.in"
  2. أضف قاعدة إلىconfig.ac لإنشائها في الأسفل
  3. استخدم ماكرو قمت بإنشائه يسمى AS_AC_EXPAND
  4. استخدامه مثل هذا:

    AS_AC_EXPAND(بيندير، $bindir)

  5. في "myscript.in"، يمكنك الآن استخدام @BINDIR@ وسيتم توسيعه إلى المسار الكامل حيث سيتم تثبيت البرنامج النصي في نهاية المطاف.

لاحظ أنه لا ينبغي عليك استخدام PREFIX مباشرة، فمن المحتمل أن يتم تغيير أي من أدلة التثبيت، لذا فأنت تريد حقًا استخدام القيمة التي تم تمريرها لتكوين bindir وتوسيع ذلك.

إذا لم تنتقل البرامج النصية awk إلى دليل bin الرئيسي (البادئة/bin)، فأنت بحاجة إلى وضعها في دليل فرعي مناسب - ربما من lib ولكن ربما libexec أو share (نظرًا لأن البرامج النصية awk ربما تكون محايدة للنظام الأساسي) .

صحيح:لن ينتهي الأمر بالضرورة بالبرنامج في /usr/local/bin؛على جهازي، تتم إدارة /usr/local/bin بواسطة MIS وبالتالي فإن جميع البرامج التي أقوم بتثبيتها تكون ضمن /usr/gnu/.أنا أستعمل:./configure --prefix=/usr/gnu لتثبيت البرنامج في المكان الذي أريده.

يمكنك تضمين قيمة PREFIX في البرامج النصية bash - وعلى نحو فعال، سوف تقوم "بتجميع" البرامج النصية لتضمين موقع التثبيت.كن على دراية بالمشكلات التي تحدث أثناء اختبار البناء - قد تحتاج إلى تحديد موقع البرامج النصية المتعلقة بالدليل الحالي أولاً وبالنسبة إلى PREFIX لاحقًا.

هناك بعض النصائح حول هذا في دليل التشغيل الآلي.يبدو أن الطريقة المفضلة هي إنشاء البرامج النصية باستخدام ملف makefile وليس باستخدام البرنامج النصي للتكوين.

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