Question

J'ai c ++ code qui a besoin d'un Sed fait à elle avant la compilation. Comment puis-je placer cela en Makefile.am?

J'ai essayé la configuration typique de makefile et la cible semble ne pas exister:

  

gentest.cc:

     
    

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

  

Si vous êtes intéressé à pourquoi je veux faire, c'est parce que je l'ai écrit mon programme (slider3.py) en python et mon partenaire a écrit son en C ++ (gentest.cc) et ses besoins à appeler la mienne. J'accomplir en éditant le argv, puis en utilisant 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;

     

} ...

Je l'ai déjà manié obtenir le #! ajouté à slider3.py et chmod +x en utilisant la méthode qui ne fonctionnait pas pour gentest.cc. J'ai aussi manié l'ajout slider3.py à la liste des fichiers qui sont installées.

  

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 est défini de cette façon dans Makefile.am:

  

bin_PROGRAMS = gentest

     

gentest_SOURCES = gentest.cc

     

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

Et ce ne être exécuté pendant le make (notez le modèle de @ est développé avec succès dans Makefile):

  

gentest.cc:

     
    

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

  

Toutes les idées sur la façon d'obtenir sed à courir avant de compiler gentest.cc?

Était-ce utile?

La solution

Ne pas utiliser en place sed.

Au lieu de cela:

gentest_SOURCES = gentest-seded.cc

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

Autres conseils

Avez-vous déjà pensé #define-ing dans config.h (vous utilisez autotools, non?) Ou le passage à l'aide -D lors de la compilation? C'est vraiment pas le cas pour sed.

Les détails de la réponse d'Andrew Y:

dans votre source de C ++, spécifiez:

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

puis compiler avec

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

Avez-vous envisagé d'appeler le code Python directement à partir du C ++? Voici un tutoriel sur utilisant boost pour appeler python les fonctions de la C. La méthode que vous décrivez semble ici très fragile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top