Xxhash: [cmake] تجنب الرجوع إلى دليل بناء `xxhsum`

تم إنشاؤها على ١ أغسطس ٢٠١٨  ·  7تعليقات  ·  مصدر: Cyan4973/xxHash

أهلا،
أقوم بإنشاء حزمة (غير رسمية) لـ Archlinux (التوزيع الخاص بي) و makepkg (أداة إنشاء حزمة التوزيع) يحذرني من أن xxhsum يحتوي على مرجع لبناء دليل.

لقد تحققت من ذلك مع

$ strings xxhsum | grep BUILD_DIR

ووجدت حدثًا واحدًا فقط. حاولت إنشاء الحزمة بعلامة --save-temps لدول مجلس التعاون الخليجي ووجدت الملف BUILD_DIR في ملف xxhsum.o.s . لا أفهم تنسيق هذا الملف ولكن وفقًا لمحيط السلسلة ، قد يكون مرتبطًا بطريقة ما بوظيفة XXXbenchHash . لسوء الحظ ، لم أتمكن من معرفة كيفية وصول هذه السلسلة إلى xxhsum ، ولا أرى أي استخدام لوحدات الماكرو الخاصة هناك.

أرغب في التخلص من هذه السلسلة (انظر ، على سبيل المثال ، "الإنشاءات القابلة للتكرار") ولكنني الآن ضائع وليس لدي أي فكرة عما يجب القيام به أكثر. هل لدى أي شخص فكرة عن كيفية التخلص من هذه السلسلة في النظام الثنائي المترجم أو يعرف كيفية تصحيح المشكلة؟

build issue help wanted

التعليق الأكثر فائدة

أهلا،
للسجل ، وجدت سبب المشكلة وحلها. باختصار: استخدم الملف التالي CMakeLists.txt وضعه في الدليل العلوي.

قصة طويلة: يرجع المرجع إلى دليل المصدر إلى الماكرو __FILE__ بكل أشكاله. في هذه الحالة بالذات يتسلل من خلال الماكرو assert . إذا قام أحدهم بترجمة المشروع داخل الدليل المصدر ، فلا توجد مشكلة لأنه في هذه الحالة يتم توسيع __FILE__ (بواسطة المترجم) إلى مسار نسبي. لكن إحدى أكثر ميزات cmake استخدامًا هي التجميع خارج دليل المصدر وفي هذه الحالة يقوم المترجم بتوسيع الماكرو __FILE__ إلى المسار الكامل. ومع ذلك ، من الممكن استخدام المسارات المتعلقة بالدليل المصدر ولكن يتعين على المرء إعادة تعريف الماكرو __FILE__ . يمكن للمرء استخدام cmake كما هو موضح في الملف أعلاه.

ال 7 كومينتر

هذا غريب جدا.
لا يوجد شيء داخل شفرة المصدر xxhsum.c عرضة لإنشاء مرجع إلى BUILD_DIR .

قمت بتجميعها على Linux mint vm ، وقمت بإجراء نفس الفحص كما يلي:

$ strings xxhsum | grep BUILD_DIR
$

لم يرد أي شيء.

قد تكون قطعة أثرية من نظام البناء.

أفترض أنك تستخدم الدليل الفعلي بدلاً من BUILD_DIR ، أليس كذلك؟ إذا قمت بذلك ، فقد تكون على حق ، فهذه قطعة أثرية من أداة البناء الخاصة بي. سأحاول نظام مختلف للتحقق من ذلك. بالنسبة إلى نظامي الحالي ، يمكنني إعادة إنتاج هذا يدويًا:

$ cd DIR_WITH_UNPACKED_SOURCE
$ mkdir build
$ cmake ../xxHash-0.6.5
$ make
$ strings xxhsum | grep BUILD_DIR
BUILD_DIR:
DIR_WITH_UNPACKED_SOURCE/xxHash-0.6.5/xxhsum.c

البيئة: bash 4.4.023، GCC 8.1.1 20180531، binutils 2.30، cmake 3.11.4، make 4.2.1، glibc 2.27.

آه ، لم أختبر cmake ، وقد يكون هذا هو سبب ظهور هذه المشكلة.
لقد اختبرت فقط عملية إنشاء make الأبسط:

$ cd XXH_SRC_DIR
$ make
$ strings xxhsum | grep BUILD_DIR
$

cmake يتم صيانته من قِبل طرف ثالث (ومن هنا جاءت العلامة "غير الرسمية") ، لا أفهم جميع العناصر الداخلية والآثار الجانبية ، لسوء الحظ ، وأحتفظ رسميًا فقط بـ Makefile .

أهلا،
للسجل ، وجدت سبب المشكلة وحلها. باختصار: استخدم الملف التالي CMakeLists.txt وضعه في الدليل العلوي.

قصة طويلة: يرجع المرجع إلى دليل المصدر إلى الماكرو __FILE__ بكل أشكاله. في هذه الحالة بالذات يتسلل من خلال الماكرو assert . إذا قام أحدهم بترجمة المشروع داخل الدليل المصدر ، فلا توجد مشكلة لأنه في هذه الحالة يتم توسيع __FILE__ (بواسطة المترجم) إلى مسار نسبي. لكن إحدى أكثر ميزات cmake استخدامًا هي التجميع خارج دليل المصدر وفي هذه الحالة يقوم المترجم بتوسيع الماكرو __FILE__ إلى المسار الكامل. ومع ذلك ، من الممكن استخدام المسارات المتعلقة بالدليل المصدر ولكن يتعين على المرء إعادة تعريف الماكرو __FILE__ . يمكن للمرء استخدام cmake كما هو موضح في الملف أعلاه.

أهلا!
أعتقد أنه يجب تعريف الماكرو assert على أنه (void)0 إذا تم تعريف NDEBUG .

NDEBUG تلقائيًا بواسطة CMake إذا تم تعيين CMAKE_BUILD_TYPE على _ "Release" _ (لمولدات التكوين الفردي مثل Unix Makefiles) أو إذا كان إنشاء مشروع بخيار --config Release (لمولدات التكوين المتعددة مثل Xcode) .
بالنسبة إلى _ "RelWithDebInfo" _ نوع البناء ، يجب تحديد NDEBUG خلال امتلاكه في المصادر أو في قوائم CMake.
لقد اختبرت ذلك للتو.

حظا طيبا وفقك الله!

تم تحديث منطق assert ، وتم تعريفه هنا:
https://github.com/Cyan4973/xxHash/blob/dev/xxhash.c#L146

افتراضيًا ، يتم تعطيل كافة التأكيدات في xxhash .
لتمكينها ، يلزم تعيين DEBUGLEVEL على قيمة >= 1 .
حتى في هذه الحالة ، لا يزال من الممكن تعطيل assert() من خلال تعيين NDEBUG .

مهما كانت قيمة DEBUGLEVEL ،
لن يتم تعديل إعداد NDEBUG ،
يظل كما هو تمامًا بعد تضمين رمز xxhash
(عادةً بـ XXH_INLINE_ALL ، وهو نوع البناء الأكثر تأثيرًا).

أعتقد أنه تم إصلاح هذه المشكلة.
اختبرت cmake أنتجته xxhsum على نظام Linux باستخدام strings ، ولم أجد أي مرجع لـ BUILD_DIR .

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

easyaspi314 picture easyaspi314  ·  7تعليقات

devnoname120 picture devnoname120  ·  8تعليقات

vinniefalco picture vinniefalco  ·  4تعليقات

jtoivainen picture jtoivainen  ·  4تعليقات

jvriezen picture jvriezen  ·  6تعليقات