كيفية إنشاء متغير جديد في BJAM
-
01-10-2019 - |
سؤال
لقد حاولت قراءة الوثائق ، لكنها لا يمكن اختراقها إلى حد ما ، لذا آمل أن يكون لدى شخص ما إجابة بسيطة. أريد تحديد "متغير" جديد ، استنادًا إلى "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 سيقوم بإنشاء بنية الدليل أم لا. (ربما سوف.)