Question

Je travaille sur un projet qui est écrit dans les deux C ++ et Python. J'ai la ligne suivante dans mon configure.ac:

AC_INIT(MILHOUSE, 0.3.6)

ce qui veut dire que, dans le config.h généré en exécutant configure, i ont les suivantes définissent la ligne:

/* Define to the version of this package. */
#define PACKAGE_VERSION "0.3.6"  

Je voulais juste savoir s'il y avait un module existant pour les symboles configure l'analyse syntaxique comme celui-ci ou au moins un standard d'accès en python ces définit.

Était-ce utile?

La solution

AC_INIT définit non seulement les symboles de préprocesseur, il définit également les variables de sortie. Lorsque vous listez un fichier, nous allons l'appeler somefile, dans votre macro AC_CONFIG_FILES, votre script configure recherche un fichier appelé somefile.in, et remplace les noms de toutes les variables de sortie entre @ -signs avec leurs valeurs, appelant le résultat somefile.

Ainsi, pour accéder à ces définitions dans un fichier Python somescript.py, mettre quelque chose comme ça dans votre configure.ac:

AC_INIT(MILHOUSE, 0.3.6)
...blah blah...
AC_CONFIG_FILES([
  some/Makefile
  some/other/Makefile
  somescript.py
])

Nommez ensuite votre fichier Python somescript.py.in et accéder à la variable de sortie package_version comme ceci:

version = '''@PACKAGE_VERSION@'''

Les triples guillemets sont probablement sages, parce que vous ne savez jamais quand une variable de sortie peut contenir une citation.

Autres conseils

Les exemples page du pyparsing wiki comprend cet exemple d'un expandeur macro. Voici l'exemple de code qu'il traite:

#def A 100
#def ALEN A+1

char Astring[ALEN];
char AA[A];
typedef char[ALEN] Acharbuf;

Il se chargera également des macros qui sont définies en termes d'autres macros. Ne devrait pas être difficile de changer « #def » à « #define ».

Ajout à la accepté réponse: si vous êtes intéressé par une variable définie personnalisée, assurez-vous d'utiliser AC_SUBST en plus à AC_DEFINE[_UNQUOTED] rien d'autre est remplacé dans vos fichiers de configuration. En utilisant les conseils de cette autre réponse , j'ai ajouté à mon configure.ac

AC_DEFUN([AX_DEFINE_SUBST], [
AC_DEFINE_UNQUOTED([$1], [$2], [$3])
AC_SUBST([$1], [$2])
])
...
AX_DEFINE_SUBST([OUTPUT_DIRECTORY], "$with_output", [output directory])

dans config.h je reçois

/* output directory */
#define OUTPUT_DIRECTORY "/some/directory/"

et config.py.in est converti de

output_directory = '''@OUTPUT_DIRECTORY@'''

à config.py

output_directory = '''/some/directory/'''
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top