Позвоните SED для источника в makefile.am
Вопрос
У меня есть код C ++, который нуждается в SED для него до компиляции. Как мне поместить это в Makefile.am
?
Я попробовал типичную настройку MakeFile, и цель, кажется, не существует:
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)
И это не может быть запущено во время марки (обратите внимание на @
шаблон успешно расширен в 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
-10 в config.h (вы используете autotools
, верно?) Или передавая его, используя -D
При составлении? Это действительно не так для sed
.
Подробности от ответа Эндрю Й:
В вашем источнике C ++ укажите:
argv2[0] = SCRIPTPREFIX "/bin/slider3.py";
затем компилируйте с
-DSCRIPTPREFIX='"/your/script/prefix"'
Вы думали о вызове кода Python непосредственно из C ++? Вот учебник по Использование Boost для вызова функций Python из C ++. Анкет Метод, который вы описываете здесь, кажется очень хрупким.