Вызов SED для источника в Makefile.am - PullRequest
3 голосов
/ 25 августа 2009

У меня есть код на С ++, которому перед компиляцией нужно выполнить sed. Как мне поместить это в Makefile.am?

Я попробовал типичную настройку make-файла, и цель, кажется, не существует:

gentest.cc:

$(SED) -i "s|FIND|REPLACE|" gentest.cc

Если вас интересует, почему я хочу это сделать, то это потому, что я написал свою программу (slider3.py) на python, а мой партнер написал его на 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)

И это не может быть выполнено во время make (обратите внимание, что шаблон @ успешно раскрыт в Makefile):

gentest.cc:

$(SED) -i "s|__PREFIX__|@prefix@|" gentest.cc

Есть идеи, как запустить sed перед компиляцией gentest.cc?

Ответы [ 3 ]

5 голосов
/ 25 августа 2009

Рассматривали ли вы когда-нибудь #define в файле config.h (вы используете autotools, верно?) Или передали его с помощью -D при компиляции? Это действительно не так для sed.

Подробности ответа Эндрю Y:

в вашем источнике C ++ укажите:

argv2[0] = SCRIPTPREFIX "/bin/slider3.py";

затем скомпилируйте с

-DSCRIPTPREFIX='"/your/script/prefix"'
5 голосов
/ 25 августа 2009

Не используйте на месте sed.

Вместо того, чтобы:

gentest_SOURCES = gentest-seded.cc

gentest-seded.cc : gentest.cc
    $(SED) "s|__PREFIX__|@prefix@|" $< >$@
0 голосов
/ 25 августа 2009

Рассматривали ли вы вызов кода Python непосредственно из C ++? Вот учебник по с использованием boost для вызова функций Python из C ++ . Метод, который вы здесь описываете, кажется очень хрупким.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...