2010-10-03 26 views
5

Tengo un archivo BSDmakefile y GNUmakefile que son prácticamente idénticos excepto por la administración de dependencias.BSD Make y GNU Make makefile compatible

El GNUmakefile:

ifneq ($(MAKECMDGOALS), "clean") 
-include $(dependencies) 
endif 

El BSDmakefile:

.for i in $(dependencies) 
.sinclude "${i}" 
.endfor 

¿Hay una manera de hacerlo de modo que puedo detectar si estoy corriendo bajo gmake o bsdmake y luego ejecutar el apropiado incluye declaraciones basadas en eso? Recuerdo haber visto a alguien aprovecharse de una peculiaridad en ambos procesadores de archivos makefile para que pudieran lograr un efecto similar.

Alternativamente, si hay un mejor enfoque que este, me gustaría saberlo. (¡Cambiar a SCons o CMake no es apropiado!)

¡Gracias!

+1

No estoy seguro de por qué quieres hacer esto: ¿por qué no solo necesitas 'gmake' o' bmake' ¿en todos lados? Si desea ser portátil, puede usar 'automake' y dejarle los detalles. Muchos proyectos tienen bastante tiempo para lograr un solo sistema de compilación correcto, y mucho menos 2. –

Respuesta

8

Puede poner sus cosas específicas de GNU en GNUmakefile, sus cosas específicas de BSD en BSDmakefile, y sus cosas comunes en un archivo llamado Makefile.common o similar. Luego incluya Makefile.common al comienzo de cada uno de los otros dos. Lo malo es que ahora tienes 3 makefiles en lugar de 2. Al revés, solo estarás editando 1.

+1

Su "inconveniente" es como decir que dividir un archivo de 10.000 LOC en unidades lógicamente relacionadas tiene la desventaja de producir más de un archivo fuente. –

+2

@Jack Kelly: Pero lo hace. :) –

Cuestiones relacionadas