2010-01-26 15 views
9

En mis archivos c/C++, hay #define múltiple. A modo de ejemplo:¿Cómo puedo definir #define en mis archivos Make

#ifdef LIBVNCSERVER_HAVE_LIBZ 
    /* some code */ 
#ifdef LIBVNCSERVER_HAVE_LIBJPEG 
    /* some more code */ 

¿Puede por favor dígame cómo puedo modificar mi Makefile.in de modo que tenga los #define en TODOS los archivos durante la compilación?

Gracias.

+1

considere modificar configure.ac o Makefile.am en su lugar. Makefile.in no es para consumo humano. – Anycorn

+0

@unknown: configure.ac necesitará establecer los valores en algún lugar en Makefile.in. Makefile.in está destinado en parte para el consumo humano, a menos que esté utilizando Automake u otra cosa para generar Makefile.in. –

Respuesta

12
-DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG 

Se podía pasar los de CPPFLAGS,

CPPFLAGS = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG 

o hacer nueva variable

CUSTOMDEFINES = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG 

y pasarlo a CPPFLAGS = -DEXISTINGFLAGS $(CUSTOMDEFINES)

Esos son finalmente pasará a gcc/g++ -D...

$(CC) $(CPPFLAGS) 
+3

afaik preprocessor flags debería ir a 'CPPFLAGS' – Christoph

+0

Tienes razón, pasé por alto etiquetas como C C++, editó – YOU

+0

@ s.mark - dang, golpeaste el clavo en la cabeza allí ... Eso fue lo que Estaba tratando de averiguar ... mi respuesta fue cercana pero no lo suficientemente cerca :) – t0mm13b

1

Añadir la línea de abajo, a su makefile:

 
DEFINES=LIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG 
... 
... further on in your makefile on the line where it says .... 
... 
    $(cc) ($(addprefix -D, $(DEFINES))) ..... 
... 
... 

Esta es servir como un ejemplo, sólo añadir otro definen a la variable DEFINES que consigue referenciado en la línea como se muestra $(cc) -D$(DEFINES) en la que el make expandirá automáticamente la variable y compilará aquellos que son #ifdef d.

Gracias a R Samuel Klatchko por señalar un pequeño mal ... esto es específicamente para el maquillaje de GNU, puede utilizar adecuadamente addprefix no hacer eso ($ (addprefix -D, $ (define))).

+0

Eso solo agregará -D a la primera definición (por lo que dará '-DLIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG'). Si tiene GNU make, puede usar addprefix do haga eso ('$ (addprefix -D, $ (DEFINES))'). –

+0

@R Samuel Klatchko: ¡Editó la respuesta para reflejar su comentario! Saludos por el heads-up! :) – t0mm13b

+0

Normalmente, $ (CC) o $ {CC} tendrán el CC en mayúsculas, no en minúsculas. –

0

No modifique su Makefile.in. (y considere usar Automake y convertir su Makefile.in en un Makefile.am mucho más simple). El objetivo de estos #defines es permitir que el guión de configuración los defina en config.h, y los archivos de origen deben #incluir <config.h>. Si está manteniendo el paquete, deberá escribir pruebas en configure.ac para determinar si el sistema que se está utilizando tiene instalado libvncserver con soporte para jpeg y zlib. Si modifica Makefile.in para definirlos siempre, entonces está asumiendo que su código solo se está construyendo en máquinas donde esas características están disponibles. Si realiza esa suposición, aún debe agregar comprobaciones a configure.ac para confirmarlo, y hacer que la secuencia de comandos configure falle si no se cumplen las dependencias.

Cuestiones relacionadas