Pregunta

¿Cómo hago un makefile que funciona en AIX, Linux y SunOS y tiene la capacidad de ofrecer diferentes opciones de compilación para cada entorno?

Tengo acceso a una variable de entorno que describe el sistema operativo, pero la utilidad de AIX hago no le gusta ifeq, así que no puedo hacer algo como:

ifeq($(OS), AIX)
    CFLAGS = $(CFLAGS) <IBM compiler options>
endif
¿Fue útil?

Solución

Puede utilizar una construcción como esta:

CFLAGS_AIX = banderas AIX
banderas Linux CFLAGS_Linux =
CFLAGS_SunOS = banderas de SunOS
CFLAGS = $(CFLAGS_$(OS))

Otros consejos

La portabilidad de un Makefile no está directamente relacionado con el sistema operativo, pero con la aplicación de maquillaje en la plataforma en cuestión. (Por lo tanto, existe una relación indirecta en que la aplicación de maquillaje puede ser adivinado (pero no con exactitud) desde el sistema operativo.) En general, este es un problema difícil para los que se han propuesto muchas soluciones. Es posible que desee ver en automake, que generará los archivos make portátiles para usted. Sin embargo, la solución de automake al problema de establecer banderas de diferentes Unices no puede apelar a usted como la solución es (básicamente) "no lo hagas". En lugar de las opciones basadas en la plataforma de la configuración, la filosofía consiste en determinar de qué parámetros son necesarios en base a la funcionalidad proporcionada por el anfitrión o por el usuario a la hora de configurar. solución basada en una conveniente autoconf / automake para el problema de la asignación de banderas basado en la plataforma es tener un archivo distinto para cada una de las plataformas que asigna CFLAGS en el tiempo de configuración, y tienen el archivo especificado en la variable de entorno CONFIG_SITE del usuario configurar en ejecución . Puede asignar CONFIG_SITE en la secuencia de comandos de inicio de sesión del usuario en función de la plataforma. (Es decir, empujar el problema lejos de configure / hacer y en la configuración de inicio de sesión) Esto hace que la asignación transparente al usuario construir el software. (Transparente pero fácilmente anulados).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top