2009-12-11 19 views
6

Estoy usando la variable SKELETON_JAR en mi código C++ en un encabezado. Sin embargo, quiero permitir que el usuario defina fácilmente el lugar del contenedor en el tiempo de compilación. Creo que la forma más fácil de hacerlo es poner esta definición en makefile ¿es así?C++ preprocesador variable

#define SKELETON_JAR "./Util.jar" 
+0

¿Cuál es su entorno de compilación? Su sistema operativo? –

Respuesta

8

En su código:

#ifndef SKELETON_JAR 
    #define SKELETON_JAR "./Util.jar" // default path 
#endif 

y luego en el archivo MAKE use CPPFLAGS:=-DSKELETON_JAR="./Util.jar".

Por supuesto, debe asegurarse de que CPPFLAGS se pasen al compilador como parte de la regla de compilación, que es el caso si está utilizando las reglas implícitas predeterminadas.

From GNU Make documentation:

Compilación de programas en C

no se hace automáticamente de Carolina del Norte con un dominio de la forma `$ (CC) -c $ (CPPFLAGS) $ (CFLAGS)'

+0

Un poco útil de compilación condicional, aunque no me habría arriesgado a hacer ninguna suposición sobre la naturaleza del archivo MAK del OP. La parte importante es simplemente el interruptor de línea de comando -D. – Clifford

+0

gracias chicos, ambas respuestas son maravillosos –

+2

Como alternativa a la definición de una ruta predeterminada también se puede hacer algo como esto: #ifndef SKELETON_JAR #error "SKELETON_JAR no se ha definido" #endif De esa manera usted detectar fácilmente cualquier caso en el que no se haya definido en un Makefile – Glen

6

Dependiendo de su compilador, la forma normal de hacer esto es usar el indicador -D del compilador en el archivo MAKE. Por ejemplo:

MYFLAGS = -DSKELETON_JAR = "foo"

luego más tarde:

gcc $ (MYFLAGS) $ (OTHER_STUFF)

+0

Para el infractor - ¿qué parte de esta respuesta es incorrecta? –

+0

Me preguntaba lo mismo –

+0

Algunas personas solo quieren votar, supongo. Tal vez simplemente hubiera descrito la opción -D = GCC en lugar de hacer suposiciones posiblemente confusas sobre el archivo MAK del OP. – Clifford

0

Utilice los indicadores de compilación para el mismo y defina el indicador en Makefile.