هو قاعدة هدف فارغة بديل قابل للتطبيق ل .Default_goal في جنو؟

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

  •  12-09-2019
  •  | 
  •  

سؤال

قدم الإصدار 3.81 الإصدار 3.81 متغير خاص يسمى .default_goal التي يمكن استخدامها لإخبار أي هدف (أو هدف) ما إذا لم يتم تحديد هدف في سطر الأوامر. بخلاف ذلك، ستجعل ببساطة الهدف الأول الذي يواجهه.

انصح:

شريط: ABC $ {make_bar_commands} foo: xyz $ {make_foo_commands}

مع makefile الافتراضية أعلاه، تشغيل make سيبني "بار"، لأنه الهدف الأول الذي يصنع اللقاءات. ولكن إذا أضفنا .default_goal، مثل ...

.default_goal: = foo # بناء فو افتراضيا، حتى لو لم يكن أولا. شريط: ABC $ {make_bar_commands} foo: xyz $ {make_foo_commands}

... ثم جعل (الإصدار 3.81) سيبني "Foo" إذا ريننا فقط make.

لقد وجدت هذا المتغير .default_goal ليكون مفيدا جدا في إطار معين، وإعادة الاستخدام "الإطار" الذي بنيت فيه. ومع ذلك، أجد أن العديد من الأنظمة لا تزال لديها GNU جعل 3.80 أو أقدم ولا يدعمون هذا المتغير.

أثناء اللعب حول الأشياء، لاحظت أن مجرد تحديد قاعدة مستهدفة فارغة يبدو أن لها نفس التأثير مثل .Default_Goal، حتى على إصدارات ما قبل 3.81 من GNU Make:

Foo: # شريط قاعدة الهدف فارغة: ABC $ {make_bar_commands} foo: xyz $ {make_foo_commands}

أعلم أنه صالح وقانوني للإضافة إلى قواعد الهدف و / أو بريونكيسيت من خلال تحديد قواعد مستهدفة إضافية بهذه الطريقة. ومع ذلك، فأنا أتساءل عما إذا كان القيام بذلك قد يؤدي إلى إدخال بعض الآثار الجانبية غير المرغوب فيها المحتملة التي لا تحدث عند استخدام .default_goal.

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

لذا فإن أسئلة السطر السفلي هي: هل هناك فرق قابل للكشف من الخارج بين استخدام .default_goal مقابل قاعدة مستهدفة فارغة؟

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

المحلول

لا أستطيع أن أعطيك إجابة محددة، لكن يمكنني اقتراح أسباب أخرى لإدخالها:

  1. من الواضح على الفور ما .DEFAULT_GOAL هل؛ أي ما يقوله على الملصق. إن وجود ومعنى له هدف فارغ بخط واحد يتم الاهتمام به بسهولة، خاصة في makefile أكبر
  2. يمكنك بالفعل قراءة قيمة $(.DEFAULT_GOAL) مرة أخرى في مكان آخر في makefile. يشير الاختبار إلى أنه لا يحدث فرقا فيما إذا كان من المحدد بشكل صريح، أو ما إذا كان يحدد من خلال اختيار القاعدة الأولى.

نصائح أخرى

لديك "FOO: # القاعدة المستهدفة الفارغة" تتعارض مع قواعد القولون المزدوجة.

إذا كنت تحكم تلك (:: القواعد)، فهي تعمل فقط إذا كانت القاعدة الأولى. لذلك، إذا قمت بتشمل Clear-Variables.mk "في البداية، وبشكل عام، يكون لديك شبكة معقدة من الملفات، وهذا" .default_goal "سيجعل الأمر واضحا و التحقق, ، أن قاعدة واحدة فقط يمكن أن تكون الافتراضي.

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