هل من الممكن جعل Microsoft Build.exe تشمل مصادر من الدلائل عن بُعد؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

إضافة ملفات المصدر أكثر من دليل واحد (على سبيل المثال ../../Source.cpp أو ../../../somewhere_else/source.cpp المصادر = الإعلان في بناء WDK/DDK يعطي الخطأ التالي:

Ignoring invalid directory prefix in SOURCES= entry

هل من الممكن تضمين ملفات المصدر عن بُعد في البناء؟

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

المحلول

لا يمكن القيام بذلك مباشرة. build تم تصميمه بشكل صريح فقط للتعامل مع رمز المصدر في نفس أو الدليل الوالد لـ sources ملف. لا يمكن استخدام ملفات المصدر من مواقع تعسفية. على وجه الخصوص ، يبدو أن نظام تتبع التبعية الخاص به غير قادر على تحليل وتتبع الملفات عن بُعد ، وبالتالي فهو يتحقق بشكل صريح ويفرض أن جميع الملفات محلية.

هناك حلان شائعان:

  1. قم ببناء الرمز البعيد كـ LIB منفصل (إما عبر دليل/دليل فرعي آخر في نفس الوقت build المشروع ، أو باستخدام خطوة بناء مستقلة).

  2. ضع كعبًا محليًا لكل ملف مصدر بعيد #include "../../remote_source.cpp, وأضف هذا الكعب المحلي إلى SOURCES= قائمة ، بدلا من ذلك. هذا سوف يعمل ، ولكن build/nmake إرادة ليس تتبع التبعيات في remote_source.cpp. إذا remote_source.cpp التغييرات ، سوف تضطر إلى أي منهما touch مصدر الوكيل المحلي ، أو يجبر إعادة البناء (حذف الوكيل المحلي OBJ ، build مع -cZ, ، او غير ذلك).

نصائح أخرى

طريقة بديلة هي استخدام Source.inc لتضمين هذه الملفات.

أكره إحياء موضوع قديم للغاية ، لكنني واجهت هذا أيضًا.

تتمثل الطريقة البديلة البديلة في إنشاء ملف مصادر أخرى بداخله يقوم فقط بإنشاء ملفات الكائنات للمصدر البعيد ، لذلك تم تسمية ملف بشكل أساسي في مكان ما _else المصادر, ، واعطها نفس الدليل الوسيط.

ثم أضف ملف "dirs" إلى الدليل الأصلي وحدد هذا المجلد البعيد في الداخل. ثم اربط مباشرة إلى ملف الكائن عن طريق إضافة شيء مثل هذا إلى ملف المصادر الأصلية:

$(TARGETLIBS) = $(PROJECT_OBJ_ROOT)\$(O)\source.obj

وبهذه الطريقة ، لا يتعين عليك التجميع كـ LIB ، لكن بناء يعامله مثل أحدهم وروابط دون أي فحص تبعية أو رعاية الموقع.

بطبيعة الحال ، قد تواجه بعض المشكلات إذا منحتهم نفس الدليل الوسيط ونفس اسم الملف المصدر الأصلي (Source.cpp)

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