es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sintaxis de patrón %.3: man/libfoo.man en Automake con diferentes nombres base.

He escrito una biblioteca libfoo que proporciona las funciones bar y baz.
Deseo que el usuario pueda encontrar la misma página de manual (desde mans/libfoo.man) cuando llamen a man libfoo, man bar y man baz (Similar a man fprintf, man sprintf que apuntan a la misma página).

Mi configuración actual tiene los archivos mans/libfoo.man y Makefile.am.

Para indicarle a Automake que deseo obtener las tres páginas de manual, especificé la variable dist_man3_MANS.

Makefile.am:
Makefile
dist_man3_MANS = mans/libfoo.3 mans/bar.3 mans/baz.3

Proveniente de GNU make, pensé que simplemente podría escribir
Makefile
%.3: mans/libfoo.man
ln -S libfoo.man $@

para crear enlaces temporalmente y luego permitir que Automake los instale correctamente, pero Automake muestra un error con Makefile.am:115: warning: '%'-style pattern rules are a GNU make extension. Quiero hacerlo de manera correcta y tomar en serio esta advertencia para no depender de GNU Make y ser lo más portable posible.

El manual de Automake sugiere agregar un objetivo
Makefile
.man.3:
$(LN_S) $^ $@

pero eso solo le indica a Automake que xx.man se puede compilar a xx.3, requiriendo que el nombre base sea el mismo. No quiero tener esos archivos xx.man, por lo que este enfoque no funciona.

Podría solucionarlo con una regla
“`Makefile
dist<em>man3</em>MANS = mans/libfoo.3 mans/bar.3 mans/baz.3

$(dist<em>man3</em>MANS): mans/libfoo.man
$(LN_S) libfoo.man $@
“`

pero eso parece una solución sucia, porque no estoy proporcionando una receta para compilar .man a .3, sino que digo: “Oye, puedes crear esos archivos con esta regla”, lo cual en este caso puede funcionar por coincidencia.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para proporcionar la misma página de manual para man libfoo, man bar y man baz, puedes utilizar el siguiente archivo Makefile.am:

    dist_man3_MANS = mans/libfoo.3 mans/bar.3 mans/baz.3
    
    $(dist_man3_MANS): mans/libfoo.man
        $(LN_S) libfoo.man $@
    

    Este Makefile establece la variable dist_man3_MANS con los tres archivos que deben ser instalados como páginas de manual. La segunda regla especifica que cada uno de estos archivos debe ser creado enlazando libfoo.man al archivo objetivo utilizando la receta $(LN_S). Esto asegura que todas las tres páginas de manual apunten al mismo archivo.

    Es importante destacar que este enfoque no depende de extensiones de GNU make y, por lo tanto, es más portable que el uso de reglas de patrón con %. Aunque los archivos xx.man no están incluidos explícitamente en la variable dist_man3_MANS, serán construidos y enlazados a los archivos de salida correspondientes según sea necesario.

Comments are closed.