Llamando SED para una fuente de Makefile.am
Pregunta
Tengo c ++ código que necesita una SED hecho a él antes de la compilación. ¿Cómo hago esto en Makefile.am
?
Probé la configuración típica makefile y el objetivo parece no existe:
gentest.cc:
$(SED) -i "s|FIND|REPLACE|" gentest.cc
Si está interesado en cuanto a por qué quiero hacer esto, es porque escribí mi programa (slider3.py
) en Python y mi pareja escribió su en C ++ (gentest.cc
) y sus necesidades para llamar a la mía. Estoy lograr esto mediante la edición del argv
y luego usando 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;
} ...
Ya he manejado conseguir el #!
añadido a slider3.py
y chmod +x
utilizando el método que no estaba funcionando para gentest.cc
. También he manejado añadiendo slider3.py
a la lista de archivos que se instalan.
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
se define de esta manera en Makefile.am
:
bin_PROGRAMS = gentest
gentest_SOURCES = gentest.cc
gentest_LDADD = libgen.a #../libsbsat.la $(LIBM)
Y esto no puede ser ejecutado durante make (tenga en cuenta el patrón @
se expande con éxito en Makefile
):
gentest.cc:
$(SED) -i "s|__PREFIX__|@prefix@|" gentest.cc
¿Alguna idea sobre cómo conseguir sed
a correr antes de compilar gentest.cc
?
Solución
No debe usarse en lugar de sed.
En lugar de ello:
gentest_SOURCES = gentest-seded.cc
gentest-seded.cc : gentest.cc
$(SED) "s|__PREFIX__|@prefix@|" $< >$@
Otros consejos
¿Alguna vez ha considerado #define
-ción en config.hy (que está utilizando autotools
, ¿verdad?) O si se la utiliza -D
al compilar? Esto no es realmente el caso para sed
.
Los detalles de la respuesta de Andrew Y:
en su fuente de C ++, especifique:
argv2[0] = SCRIPTPREFIX "/bin/slider3.py";
a continuación, compilar con
-DSCRIPTPREFIX='"/your/script/prefix"'
Ha pensado en llamar el código Python directamente desde el C ++? Aquí es un tutorial sobre rel="nofollow utilizando impulso a llamar Pitón funciones de C ++ . El método que se está describiendo aquí parece muy frágil.