`bjam -toolset =` وقيم العلامات لمرجمات Apple؟
-
01-10-2019 - |
سؤال
عند بناء المكتبات الثنائية مع bjam
, ، يمكن للمرء أن يحدد المترجم الذي يجب استخدامه ، بدون تحديد إصدار برنامج التحويل البرمجي معين ، باستخدام قيم معينة ل --toolset=
اختيار. فمثلا:
bjam --with-serialization --toolset=msvc
ال قيمة مجموعة الأدوات msvc
يروي bjam
للبحث عن نظامك عن بعض إصدار من Microsoft Visual C ++ ثم استخدمه لإنشاء عدد من المتغيرات من مكتبة Boost.Serialization. ستحتوي المكتبات الناتجة على علامة تشير إلى مجموعة الأدوات التي تم استخدامها بالفعل. على سبيل المثال ، يقوم الأمر أعلاه بإنشاء ملفات مثل:
libboost_serialization-vc100-mt-s-1_44.lib
libboost_serialization-vc100-mt-sgd-1_44.lib
...
حيث السلسلة vc100
في اسم الملف أ علامة أدوات مما يشير إلى أن Microsoft Visual C ++ 2010 تم العثور على إصدار المترجم واستخدامه لبناء المكتبات. [يمكن العثور على مزيد من التفاصيل حول اتفاقيات تسمية مكتبة Boost هنا.]
يمكن للمرء أن يحدد أيضًا أ محدد نسخة من برنامج التحويل البرمجي باستخدام بعض القيم الأخرى ل --toolset=
اختيار. فمثلا:
bjam --with-serialization --toolset=msvc-9.0
يروي bjam
على الرغم من أنه قد يكون لدي العديد من المجمعين على نظامي ، إلا أنني أريده استخدامه على وجه التحديد Microsoft Visual C ++ 2008. تحتوي المكتبات الناتجة على سلسلة العلامات vc90
للإشارة إلى ذلك Microsoft Visual C ++ 2008 كان يستخدم لبناءها.
يبدو أن وثائق Boost كانت بعيدة بعض الشيء فيما يتعلق بمجموعات جديدة على MAC (على سبيل المثال ، كيف يمكن للمرء أن يميز بين GCC و LLVM-GCC و LLVM؟)
سؤالي هو ، ما هي بعض الأخرى bjam --toolset=
القيم والعلامات المقابلة لها إصدارات البرمجة المحددة في Xcode 3 و Xcode 4 على Mac (ليس قيم اسم المترجم العام مثل darwin
))؟ هل هذه موثقة في أي مكان؟ حتى إذا لم يتم دعم المكتبات الداعمة التي تحتوي على بعض الإصدارات toolset
وتم تحديد قيم العلامات حتى الآن؟
الرجاء المساعدة في استبدال ???
S في هذا الجدول:
TOOL AND VERSION --toolset= TAG
======================================================
Microsoft Visual C++ 2008 msvc-9.0 vc90
Microsoft Visual C++ 2010 msvc-10.0 vc100
Apple (1) GCC 4.0 (2) ??? xgcc40
Apple GCC 4.2 ??? xgcc42
Apple LLVM GCC 4.2 ??? ???
Apple LLVM compiler 1.5 (2) ??? ???
Apple LLVM compiler 2.0 (3) ??? ???
(1) تنتج Apple إصداراتها الخاصة من مجمعات GCC و LLVM لإضافة ملحقات وسلوك خاص بـ Apple.
(2) متوفر في Xcode 3 فقط.
(3) متوفر في Xcode 4 فقط.
المحلول
هناك رسم خرائط مباشر من مجموعة الأدوات المحددة إلى الجزء الأساسي من العلامة. وبالتالي لأي مترجم Apple Xcode الذي تحدده يستخدم darwin.jam
مجموعة الأدوات ستكون بداية العلامة دائمًا xgcc
(لـ Xcode GCC). الجزء الثاني ، أي رقم إصدار المترجم ، يتم اكتشافه تلقائيًا من المترجم نفسه. ال darwin.jam
يستخدم رمز مجموعة الأدوات -dumnpversion
خيار اكتشاف ماهية هذا الإصدار (انظر داروين الخط رقم 123). لذا بعض الأشياء:
- بالنسبة إلى Xcode ، سيكون دائمًا
toolset=darwin
للافتراضياتg++
. - للحصول على إصدارات أخرى غير مقدمة ، يجب عليك إعداد ملف
site-config.jam
أوuser-config.jam
لمعرفة Boost Build أين وأيها المجمعون لديك (انظر تكوين BB مستندات). - ال
toolset=darwin-<some_version>
يطابق ما تحدده في التكوين الخاص بك. - ال
darwin.jam
تدعم مجموعة الأدوات الاختيار الذكي للمترجم بناءً على ما تحاول إنشاءه لتسهيل الأمر.
على سبيل المثال ، أستخدم شيئًا مثل ما يلي لتطوير iOS:
using darwin : : /Xcode-path/usr/bin/g++-4.0 ;
using darwin : : /Xcode-path/usr/bin/g++-4.2 ;
using darwin : 4.2~iphone
: /Xcode-path/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv6
: <striper>
: <architecture>arm <target-os>iphone
;
using darwin : 4.2~iphonesim
: /Xcode-path/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2
: <striper>
: <architecture>x86 <target-os>iphone
;
الذي يمكنني:
bjam toolset=darwin-4.0
- لبناء OSX العادي مع GCC 4.0. مما يؤدي إلى العلامةxgcc-42
.bjam toolset=darwin-4.2
- بالمثل لـ OSX و GCC 4.2. التي سأحصل عليهاxgcc-42
.bjam toolset-darwin architecture=arm target-os=iphone
- للقيام ببناء جهاز iPhone باستخدام GCC 4.2. ينتهي العلامة أيضًاxgcc42
وهو تصادم. ولكن هناك حد لمقدارنا في تلك العلامات. وعادة ما لا تكون مشكلة لأن أحدهما يعزل نتائج بنيت عبر المنصات على أي حال.
يمكنك إعداده باستخدام أحد مجمعي LLVM عن طريق الإضافة إلى التكوين الخاص بك:
using darwin : 4.2~llvm~gcc : /Xcode-path/user/bin/llvm-g++ ;
والاستدعاء مع bjam toolset=darwin-4.2~llvm~gcc
. لسوء الحظ ، ستكون العلامة أيضًا xgcc-4.2
(كما مرة أخرى ، يعتمد على استخدام darwin.jam
). لذلك ستحتاج إلى فصل LIBs الناتجة عن تصميمات GCC الأخرى.
من المؤسف أيضًا أنه لا يوجد موقع موثق لتخطيط مجموعة الأدوات المستخدمة في قيمة العلامة بخلاف الكود (انظر BB المشترك الخطوط #801 إلى #841).