2012-08-02 17 views
5

Tengo una aplicación muy grande creada con Visual Studio 2008 que está diseñada para ejecutarse en Windows XP. El código consiste en un archivo de solución que contiene seis proyectos separados. Mi trabajo es portar esta aplicación para ejecutar en Linux. No he hecho algo como esto antes.Definición de toda la solución en Visual Studio?

Descubrí ayer que mi empresa desea que este código se compile en Windows una vez que haya terminado con él. Mi primera idea para lograr esto es utilizar una declaración preprocesador tales como:

#define COMPILE_FOR_LINUX 

Entonces, podría decirle al compilador qué archivos incluir en las cabeceras utilizando bloques de preprocesador como estos:

#ifdef COMPILE_FOR_LINUX 
// include required Linux headers here and skip Windows header includes 
#else 
// include required Windows headers here and skip Linux header includes 
#endif 

Después incluyendo los archivos correspondientes, podría encapsular todo el código dependiente de la plataforma con bloques como éstos:

#ifdef COMPILE_FOR_LINUX 
// compile Linux specific code used here. 
#else 
// compile Windows specific code used here. 
#endif 

con el fin de que sea lo más fácil posible para alguien que c Si se utiliza la aplicación para su plataforma preferida, me gustaría tener COMPILE_FOR_LINUX especificado en un solo lugar. Sin embargo, no estoy seguro de cómo lograr esto.

Una idea que tenía era crear un archivo de encabezado vacío, y luego tener cada archivo en la solución incluye este archivo de encabezado como se especifica en la ruta de acceso del archivo de solución de Visual Studio. Para Linux, tendría otra versión del archivo de encabezado que define COMPILE_FOR_LINUX, y luego tendré el punto de archivo en esta versión en lugar de la vacía. Sin embargo, estoy seguro de que esta es una solución muy cruda, y no estoy seguro si funcionará.

¿Alguien podría sugerir un método más elegante para definir algo globalmente o crear una variable de tal manera que cada archivo en la solución pueda verlo?

+0

En caso de que otras personas estén buscando esto: http://stackoverflow.com/questions/5268177/is-there-anyway-to-define-constant-on-a-solution-basis –

Respuesta

3

Depende del compilador que está utilizando, pero para gcc puede especificar las directivas de preprocesador desde la línea de comandos, por lo que sólo tendrá que añadir COMPILE_FOR_LINUX en su makefile.

g++ -DCOMPILE_FOR_LINUX ..... 

Para las ventanas, si se utiliza MSVS, puede cambiar la pestaña Preprocessor directives en las propiedades del proyecto (en realidad, que no es necesario, ya que COMPILE_FOR_LINUX no está definida, pero se puede añadir un COMPILE_FOR_WINDOWS de consistencia) .

+0

Esto suena prometedor. ¡Gracias! –

+0

¿No debería ser eso -DCOMPILE_FOR_LINUX? – mort

+0

@mort No lo sé, hace tiempo que no trabajo con gcc. ¿Lo es? –

Cuestiones relacionadas