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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top