У меня есть код C++, которому требуется sed, сделанный до его компиляции. Как разместить это в Makefile.am
?Вызов SED для источника в Makefile.am
Я попробовал типичную установку Makefile и цель, как представляется, не существует:
gentest.cc:
$(SED) -i "s|FIND|REPLACE|" gentest.cc
Если вас интересует, почему я хочу сделайте это, потому что я написал свою программу (slider3.py
) в python и мою часть ner написал его в 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__|@[email protected]|" gentest.cc
Любые идеи о том, как получить sed
для запуска перед компиляцией gentest.cc
?
Да, я использую autotools - в первый раз. Можете ли вы показать мне примеры ваших предложений? –
А, это предложение Эндрю Y -D вы говорили? –
Если у вас есть config.h (AC_CONFIG_HEADERS), вы можете использовать что-то вроде AC_DEFINE_UNQUOTED ([THE_PREFIX], ["$ prefix"]) в вашем файле configure.ac. Вам действительно нужно поиграть с ним, с документацией и другим источником, чтобы почувствовать это. Может быть проще добавить CPPFLAGS в ваш Makefile.am и передать его с помощью -DTHE_PREFIX = \ "@ prefix @ \" (или что-то в этом роде - следите за правильным экранированием). В обоих случаях вы должны сделать THE_PREFX "/bin/slider3.py" в своем коде. Это заставляет меня думать, что вы можете предпочесть @ bindir @ over @ prefix @. –