سؤال

لقد حصلت على رمز 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 ++. وبعد الطريقة التي تصفها هنا تبدو هشة للغاية.

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