2012-02-01 4 views
5

¿Hay algún tipo de if/else statemant compatible con GNU make y Berkley make (freeBSD)?make & gmake compatible if else statment

MAKE GNU:

ifeq ($(BUILD_TYPE), debug) 

Berkley marca:

.ifdef (BUILD_TYPE) 
+2

¡Tenga en cuenta que estas dos líneas NO prueban lo mismo! –

+0

son solo ejemplos de la sintaxis make & gmake. las preguntas están arriba. GNU "ifeq" es ".if" berkley hacer equivalente. Yo se esto. – abrahab

+0

¿Por qué no utilizar 'automake' y hacer que maneje las condiciones para usted, de forma portátil? –

Respuesta

5

No. Lo mejor que puede hacer es usar incluyen los archivos con nombres construidos, como:

include $(BUILD_TYPE).mk 

donde BUILD_TYPE será "depurar" o lo que sea. Esto ciertamente no es tan poderoso como si/else pero puede hacer un conjunto limitado de cosas bien, de una manera portátil.

En general, es casi imposible escribir un archivo MAKE portátil que utilice cualquier función más sofisticada que los elementos básicos proporcionados por POSIX. La sintaxis de los archivos MAKE es muy suelta y de forma libre, y sin embargo las características proporcionadas por el estándar tradicional y POSIX son tan anémicas, que la mayoría hace que los proveedores hayan creado una gran cantidad de extensiones no compatibles.

Generalmente, cuando las personas se preguntan sobre esto, les recomiendo que utilicen automake, que se encarga del tedioso trabajo de escribir makefiles portátiles para usted, o se comprometen con una marca u otra y simplemente requieren personas para compilarlo si ellos no lo tienen. GNU make, seguro, se ejecutará en una gran variedad de plataformas ... incluso en plataformas no POSIX.