سؤال

لقد حاولت قراءة الوثائق ، لكنها لا يمكن اختراقها إلى حد ما ، لذا آمل أن يكون لدى شخص ما إجابة بسيطة. أريد تحديد "متغير" جديد ، استنادًا إلى "Debug" ، والذي يضيف فقط بعض التعريفات الماكرو إلى سطر الأوامر المترجم ، على سبيل المثال "-dsomemaCro". أعتقد أنني قد أكون قادرًا على القيام بذلك باعتباره "متغيرًا فرعيًا" للتصحيح ، أو فقط حدد متغيرًا جديدًا للنسخ "Debug" ، لكنني لست متأكدًا من مكان القيام بذلك. يبدو أن الميزة. jam في $ BOOST_BUILD_DIR/BUILD قد يكون المكان. ربما ما أريده حقًا هو ببساطة "ميزة" جديدة ، لكن لا يزال من غير الواضح بالنسبة لي بالضبط ما أحتاج إلى فعله وأين ، ولا أعرف ما إذا كانت ميزة "تسمح لي بتوجيه منتجات البناء إلى دليل مختلف إلى "تصحيح التصحيح".

سيكون موضع تقدير أي اقتراحات. (في حال كنت تتساءل ، يجب أن أستخدم BJAM لأنه تم تبنيه كمعيار للشركات.)

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

المحلول

لست متأكدًا تمامًا مما تريد ، ولكن هناك عدد من الاحتمالات.

أ. تريد دائمًا تجميعها مع Macro Somemacro المحددة. في هذه الحالة ، في jamfile لمشروعك ، أضف

project
  : requirements # These are requirements for this project
      # If compiling debug, define SOMEMACRO
      <variant>debug:<define>SOMEMACRO
  : usage-requirements
      # These are requirements projects using this project must have
      <variant>debug:<define>SOMEMACRO
  ;

إذا كنت بحاجة إلى تعريف Somemacro دائمًا ، فيمكنك إزالة <variant>debug: حالة. إذا كنت بحاجة إلى تعيين أعلام أخرى يمكنك استخدامها <cflags>, <cxxflags>, ، و <linkflags> حسب الاقتضاء.

ب. تريد أن يقوم مفتاح سريع بتشغيل أعلامك/تعريفك ، ربما بشكل افتراضي ، وربما لا ، ويبني معه غير متوافق مع البناء معها. في هذه الحالة تريد ميزة.

import feature ;
feature.feature steves-feature : off on
  : composite propagated link-incompatible ;
feature.compose <steves-feature>on : <define>SOMEMACRO ;

ال feature.feature تحدد القاعدة ميزة تسمى <steves-feature> مع اثنين من القيم المحتملة وثلاث خصائص. composite يعني أنها ميزة مكونة من ميزات أخرى (في هذه الحالة <define>SOMEMACRO). propagated يعني أن أي أهداف تتضمن هدفًا مع مجموعة الميزات هذه ستحصل أيضًا على مجموعة الميزات هذه. و link-incompatible يعني الأهداف مع <steves-feature>on لا يمكن دمجها مع الأهداف <steves-feature>off. (نتيجة لذلك ، سيضع Bjam الملفات التي تم إنشاؤها تحت دليل مسمى steves-feature-on أو steves-feature-off إذا تم تعيين هذه الميزة بواسطة أي هدف.)

يمكن استخدام هذه الميزة تمامًا مثل <define> الميزة المستخدمة في قاعدة المشروع في القسم أعلاه. (يمكنك حتى إضافته إلى default-build قسم من قاعدة المشروع.)

لاحظ أنه يمكنك أيضًا تعيين ميزات من سطر الأوامر: bjam steves-feature=on.

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

variant steves-debug : debug : <steves-feature>on ;

سيكون هذا البديل هو نفسه debug البديل ولكن مع الميزة الإضافية <steves-feature>on.

أنا لم أستخدم أبدا variant القاعدة ، لذلك قد تحتاج إلى استيراد من مكان ما. أيضًا ، قد تكون قادرًا على القيام به

variant steves-debug : debug : <define>SOMEMACRO ;

لكنني لا أعرف ما إذا كان BJAM سيقوم بإنشاء بنية الدليل أم لا. (ربما سوف.)

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