2009-04-20 11 views
5

Estoy siguiendo las instrucciones en la página Using Check with the Autotools en un intento de crear compatibilidad con pruebas unitarias en un proyecto C (actualmente) pequeño. Aunque estoy usando Cgreen en lugar de Check.equivalente portátil de GNU make% -style pattern rules

Tengo problemas con el paso 9, lo que hace que automake emita una advertencia sobre el uso de las reglas de patrón de estilo `% 'que son una extensión de GNU make.

La regla determinada marca es:

check_%.$(OBJEXT) : $(srcdir)/%.c 
    $(COMPILE) -DCHECKING -c -o [email protected] $^ 

Me pregunto si hay una manera equivalente a la especificación de esta regla que no se basa en GNU hacer extensiones.

Respuesta

7

Las reglas de fabricación portátil solo pueden usar sufijos diferentes, los prefijos deben ser los mismos.

.c.o: 
     $(COMPILE) -DCHECKING -c -o [email protected] $< 

Sin embargo, el sufijo no comienza necesariamente con un punto. (En ese caso, usted tiene que decirle Automake cuáles son sus sufijos son, porque no se puede adivinar.) Así, por ejemplo, podría tener algo de la siguiente manera si cambia el nombre check_showdns.o a showdns_check.o:

SUFFIXES = _check.o 
check_libapdns_LDADD  = @[email protected] showdns_check.o 
.c_check.o: 
     $(COMPILE) -DCHECKING -c -o [email protected] $< 
+0

Excelente sugerencia. Arregla el problema Terminé usando un _test prefix en lugar de _check. – Wes

-2

prefiero tratar de desactivar la advertencia o simplemente ignóralo. GNU make existe para todas las plataformas relevantes tipo Unix; no hay ninguna razón práctica para perder tiempo manteniendo la portabilidad del archivo MAKE. GNU make también es característicamente superior a la mayoría de los demás dialectos.

+0

Eso es cierto, pero sería bueno no tener que requerir la instalación de una herramienta adicional cuando el sistema operativo host proporciona uno de fábrica. – Wes

+0

Pero considere el tiempo que debe dedicar a mantener un archivo MAKE portátil. Si orienta solo a GNU make, facilitará * mucho * más la escritura de sus archivos make y obtendrá más tiempo para mejorar su aplicación y corregir errores. – JesperE

+1

Bonita historia, ¿nombra todos sus Makefiles GNUMakefile como debería si solo apunta a GNU Make? Requerir que la 'marca' de todos sea GNU Make y no indicar su deseo de romper la compatibilidad con la marca estándar utilizando GNUMakefile es una práctica estándar ahora gracias a la actitud de "no pierdas el tiempo manteniendo un archivo MAKE portátil" – MkV