Pregunta

Estoy trabajando en un proyecto que está escrito en C ++ y Python. Tengo la línea siguiente en mi configure.ac:

AC_INIT(MILHOUSE, 0.3.6)

que significa que en la config.h generado por ejecutar configure, tengo los siguientes definir línea:

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

Sólo quería saber si había un módulo existente para los símbolos de análisis configure de esta manera o al menos una forma estándar de acceder a estos define en Python.

¿Fue útil?

Solución

AC_INIT no sólo define los símbolos del preprocesador, también define variables de salida. Cuando pones un archivo, vamos a llamarlo somefile, en su macro AC_CONFIG_FILES, la secuencia de comandos configure busca un archivo llamado somefile.in, y reemplaza los nombres de las variables de salida entre @ -signos con sus valores, llamando a la somefile resultado.

Por lo tanto, para acceder a estas definiciones en un archivo de Python somescript.py, poner algo como esto en su configure.ac:

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

A continuación, el nombre de su archivo somescript.py.in Python y acceder a la variable de salida package_version como esto:

version = '''@PACKAGE_VERSION@'''

Las comillas triples son probable que sea prudente, porque nunca se sabe cuando una variable de salida puede contener algún tipo de presupuesto.

Otros consejos

La página ejemplos de la pyparsing wiki incluye este ejemplo de un expansor de macro. Aquí está el código de ejemplo que procesa:

#def A 100
#def ALEN A+1

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

Por lo que también se encargará de macros que se definen en términos de otras macros. No debería ser difícil de cambiar '#DEF' a '#define'.

Añadir a la respuesta aceptados: si está interesado en una variable personalizada definida, asegúrese de usar, además AC_SUBST AC_DEFINE[_UNQUOTED] a los demás nada se sustituye en los archivos de configuración. Utilizando las sugerencias de esta otra respuesta , he añadido esto a mi 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])

Así que en config.h consigo

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

y config.py.in se convierte de

output_directory = '''@OUTPUT_DIRECTORY@'''

para config.py

output_directory = '''/some/directory/'''
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top