Scons: دليل المصدر لا يتم نسخه في دليل البناء
سؤال
جزء من عملية الإنشاء الخاصة بي هو إنشاء ملف TAR لدليل الإدخال ، الموجود في src/bundle/bundle
. في SRC/Bundle/Sconscript:
Import('*')
bundleDir = Dir("bundle")
jsontar = Command("bundle.tar", bundleDir,
"/home/dbender/bin/mkvgconf $SOURCE $TARGET")
في بلدي sconstruct:
SConscript(Split('src/bundle/SConscript'),
exports='bin_env lib_env', build_dir='tmp/bundle')
عند محاولة البناء:
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
/home/dbender/bin/mkvgconf tmp/bundle/bundle tmp/bundle/bundle.tar
Input directory tmp/bundle/bundle not found!
scons: *** [tmp/bundle/bundle.tar] Error 1
scons: building terminated because of errors.
من الواضح أن SCONS لا تقوم بنسخ SRC/BUNDLE/BUNDLE إلى TMP/BUNDLE/BUNDLE ، لكنني أشعر بالذهول عن السبب.
الحواشي: استخدام المسار المطلق لـ MKVGConf هو ممارسة سيئة ولكن فقط متوسطة حتى أواجه حل هذه المشكلة.
المحلول
لا تعرف Scons أي شيء عن محتويات مدخلاتك src/bundle/bundle
- فقط البرنامج mkvgconf
يعرف ماذا يفعل مع هذا الدليل.
أحد الحلول هو إضافة تبعية صريحة في Sconscript:
import os
Depends('bundle.tar', Glob(str(bundleDir) + os.path.sep + '*'))
هذا يعني أيضًا أنه عند تحديث محتويات دليل الحزمة ، سيتم إعادة تشغيل البرنامج النصي MKVGCONF.
ملاحظة. قد ترغب في تغيير build_dir
اسم الحجة إلى variant_dir
, ، كما تم إهمال الأول لصالح الأخير في إصدارات Scons الأخيرة.