استدعاء SED للحصول على مصدر في makefile.am
سؤال
لقد حصلت على رمز C ++ الذي يحتاج إلى SED القيام به قبل التجميع. كيف أضع هذا Makefile.am
?
حاولت إعداد Makefile النموذجي والهدف غير موجود:
gentest.cc:
$(SED) -i "s|FIND|REPLACE|" gentest.cc
إذا كنت مهتما بالسبب في أن أفعل ذلك، فذلك لأنني كتبت برنامجي (slider3.py
) في بيثون وشريكي كتب له في C ++ (gentest.cc
) واحتياجاته للاتصال بي. أنا أنجز هذا عن طريق تحرير argv
ثم استخدام execv()
.
... {
char **argv2 = new char*[argc];
memset(argv2,0,sizeof(argv2));
argv2[0] = "__PREFIX__/bin/slider3.py";
memcpy(argv2 + 1, argv + 2, sizeof(char *) * (argc - 2));
int oranges = execv(argv2[0], argv2);
printf("%s\n", strerror(oranges));
return oranges;
} ...
لقد تعاملت بالفعل للحصول على #!
مضاف إلى slider3.py
و chmod +x
باستخدام الطريقة التي لم تكن تعمل من أجل gentest.cc
. وبعد لقد تعاملت أيضا مع إضافة slider3.py
إلى قائمة الملفات التي يتم تثبيتها.
EXTRA_DIST=testite.sh slider3_base.py
bin_SCRIPTS = slider3.py
CLEANFILES = $(bin_SCRIPTS)
slider3.py: slider3_base.py
rm -f slider3.py
echo "#! " $(PYTHON) > slider3.py
cat slider3_base.py >> slider3.py
chmod +x slider3.py
gentest
يتم تعريف بهذه الطريقة في Makefile.am
:
bin_PROGRAMS = gentest
gentest_SOURCES = gentest.cc
gentest_LDADD = libgen.a #../libsbsat.la $(LIBM)
وهذا فشل في تشغيل أثناء إجراء (لاحظ @
يتم توسيع النمط بنجاح في Makefile
):
gentest.cc:
$(SED) -i "s|__PREFIX__|@prefix@|" gentest.cc
أي أفكار حول كيفية الحصول عليها sed
لتشغيل قبل تجميع gentest.cc
?
المحلول
لا تستخدم SED في مكان.
في حين أن:
gentest_SOURCES = gentest-seded.cc
gentest-seded.cc : gentest.cc
$(SED) "s|__PREFIX__|@prefix@|" $< >$@
نصائح أخرى
هل سبق لك أن نظرت #define
- إنه في Config.H (أنت تستخدم autotools
, ، أليس كذلك؟) أو اجتيازها باستخدام -D
عند تجميع؟ هذا حقا ليس هو الحال بالنسبة sed
.
تفاصيل جو إجابة أندرو Y:
في مصدر C ++ الخاص بك، حدد:
argv2[0] = SCRIPTPREFIX "/bin/slider3.py";
ثم تجميع مع
-DSCRIPTPREFIX='"/your/script/prefix"'
هل فكرت في استدعاء كود بيثون مباشرة من C ++؟ هنا هو البرنامج التعليمي باستخدام دفعة للاتصال بوظائف Python من C ++. وبعد الطريقة التي تصفها هنا تبدو هشة للغاية.