Pergunta

Eu tenho código C ++ que precisa de um sed feito antes da compilação. Como faço para colocar isso em Makefile.am?

Eu tentei a configuração típica makefile e o alvo parece não existir:

gentest.cc:

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

Se você está interessado no motivo pelo qual eu quero fazer isso, é porque escrevi meu programa (slider3.py) em Python e meu parceiro escreveram o dele em C ++ (gentest.cc) e suas necessidades para ligar para o meu. Estou realizando isso editando o argv e depois 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;

} ...

Eu já lidei com a obtenção do #! Adicionado a slider3.py e chmod +x usando o método que não estava funcionando para gentest.cc. Eu também lidei adicionando slider3.py para a lista de arquivos que são instalados.

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 é definido dessa maneira em Makefile.am:

bin_PROGRAMS = gentest

gentest_SOURCES = gentest.cc

gentest_LDADD = libgen.a #../libsbsat.la $(LIBM)

E isso não é executado durante a marca (observe o @ o padrão é expandido com sucesso em Makefile):

gentest.cc:

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

Qualquer idéia sobre como conseguir sed Para correr antes de compilar gentest.cc?

Foi útil?

Solução

Não use sed no local.

Em vez de:

gentest_SOURCES = gentest-seded.cc

gentest-seded.cc : gentest.cc
    $(SED) "s|__PREFIX__|@prefix@|" $< >$@

Outras dicas

Você já considerou #define-ing em config.h (você está usando autotools, certo?) Ou passando usando -D Ao compilar? Este não é realmente o caso sed.

Os detalhes da resposta de Andrew Y:

Na sua fonte C ++, especifique:

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

então compilar com

-DSCRIPTPREFIX='"/your/script/prefix"'

Você já pensou em chamar o código Python diretamente do C ++? Aqui está um tutorial sobre Usando o Boost para chamar funções Python de C ++. O método que você está descrevendo aqui parece muito quebradiço.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top