هل من الممكن جعل Microsoft Build.exe تشمل مصادر من الدلائل عن بُعد؟
سؤال
إضافة ملفات المصدر أكثر من دليل واحد (على سبيل المثال ../../Source.cpp أو ../../../somewhere_else/source.cpp المصادر = الإعلان في بناء WDK/DDK يعطي الخطأ التالي:
Ignoring invalid directory prefix in SOURCES= entry
هل من الممكن تضمين ملفات المصدر عن بُعد في البناء؟
المحلول
لا يمكن القيام بذلك مباشرة. build
تم تصميمه بشكل صريح فقط للتعامل مع رمز المصدر في نفس أو الدليل الوالد لـ sources
ملف. لا يمكن استخدام ملفات المصدر من مواقع تعسفية. على وجه الخصوص ، يبدو أن نظام تتبع التبعية الخاص به غير قادر على تحليل وتتبع الملفات عن بُعد ، وبالتالي فهو يتحقق بشكل صريح ويفرض أن جميع الملفات محلية.
هناك حلان شائعان:
قم ببناء الرمز البعيد كـ LIB منفصل (إما عبر دليل/دليل فرعي آخر في نفس الوقت
build
المشروع ، أو باستخدام خطوة بناء مستقلة).ضع كعبًا محليًا لكل ملف مصدر بعيد
#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)