In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Lio con #define

Foro de Xailer profesional en español
Responder
Avatar de Usuario
bingen
Mensajes: 581
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Lio con #define

Mensaje por bingen »

Buenas XTeam, a ver si este poequeño lio tiene solución.

Tengo un subproyecto con un trozo de código que para evitar que se compile en ciertos casos está metido en un

#ifndef XXXXX
...............
#else
...............
#endif

Si hago el #define XXXXX en el subproyecto perfecto no compila este código, pero si lo hago en el proyecto principal que es donde lo necesito me lo compila y me da los errores que quiero evitar al compilar.

Algun truqui?

Gracias y salu2.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9447
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Lio con #define

Mensaje por ignacio »

Cada proyecto es responsable de la compilación de sus módulos independientemente de que sea un subproyecto o un proyecto principal. Si quieres controlar cuando es iniciado su proceso de compilación desde un proyecto superior te sugiero que utilices otro DEFINE para ello y utilices varias lineas #IFDEF.

Saludos
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Re: Lio con #define

Mensaje por jfgimenez »

Bingen,

Respuesta corta: me temo que no hay ningún truco.

Respuesta larga: cuando tienes un subproyecto, lo normal es que sea una librería o una dll, y de una forma u otra está ligada al proyecto principal. Si ese mismo subproyecto está presente en distintos proyectos principales, no se crean distintas librerías ni dlls, sino que el subproyecto genera siempre un único fichero de salida. Y ahí es donde está el problema.

Dicho de otra forma, si utilizas un #ifdef dentro del código del subproyecto, no puedes cambiar la condición en función del proyecto principal, porque si no, al compilar otro de los proyectos principales te va a coger código incorrecto. Ten en cuenta que Xailer "recuerda" qué módulos necesita recompilar y cuales no, así que, salvo que lo fuerces con Alt+F9, no se puede garantizar que se va a recompilar un módulo determinado, tanto si tiene un #ifdef como si no.

Mi consejo es que si tienes cierto código que debe estar presente o no en función del proyecto principal, entonces lo mejor es meter ese código en dicho proyecto principal. En todo caso, podrías añadir el .prg en cuestión a cada uno de los proyectos donde lo necesites, siempre que el directorio obj de cada proyecto sea diferente, para evitar que el .o correspondiente a un proyecto termine siendo enlazado en otro proyecto.
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Avatar de Usuario
bingen
Mensajes: 581
Registrado: Lun Jul 07, 2014 8:17 pm
Ubicación: Bilbao
Contactar:

Re: Lio con #define

Mensaje por bingen »

Muchas gracias a ambos, alto y claro....

Ya me parecía mucho pedir.

Salu2.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
Responder