La eliminación de las directivas del compilador Delphi ifdef automáticamente
-
19-09-2019 - |
Pregunta
Actualmente estoy trabajando con el código 'heredada' que ha (dispersarse aleatoriamente en) un montón de directivas de compilación condicional en función de la versión de Delphi, que se remonta a Delphi 2. A partir de ahora, todo el desarrollo será con Delphi 2009 o futuro. ¿Existe una herramienta en Delphi 2009, o un plugin, que eliminará automáticamente compilador segmentos de código condicional basada en una versión especificada 'mínimo'?
Solución
Lo recomiendo altamente el Delphi Pascal inspiración preprocesador (DIPP )
Esto puede hacer varias cosas con un archivo de origen además de eliminar define condicionales, incluyendo el "inline" de incluir archivos o eliminar comentarios (todos por supuesto altamente configurable y controlable por las opciones suministradas al procesador).
La funcionalidad define condicionales es especialmente útil ya que puede o bien tienen todos esos condicionales extraído o simplemente proporcionar un conjunto de DEFINIR de que desea aplicar. DIPP entonces emitir un archivo fuente que refleja la forma en que aparecería al compilador con esos símbolos definidos, pero sin las directivas condicionales sí mismos.
Así que en su caso sólo tendría que define los símbolos correspondientes a su versión "de referencia" Delphi.
Otros consejos
Usted debe dar JEDI preprocesador (Pascal preprocesador) en el JCL una intentarlo.
En el tronco en nuestro SVN la fuente se pueden encontrar en el directorio JCL / devtools / jpp y en nuestra última versión (2.1) del archivo ZIP jpp.exe se puede encontrar en las devtools dir.
No sé de una herramienta de este tipo pero debe ser relativamente sencillo para escribirlo.
- Bucle a través de todos los archivos en el directorio utilizando
FindFirst
yFindNext
- Uso
TStringList.LoadFromFile
a leer todos los archivos pas. - Bucle a través de las cuerdas y buscar directivas
{$IfDef}
. Si la versión especificada en la sección condicional es más antigua que D2009 quitar todo el texto hasta que el{$EndIf}
. - Uso
TStringList.SaveToFile
para escribir el archivo modificado en el disco.
Mi consejo sería código de cambio sólo a gestionar por completo. Sin embargo, si usted también va a modificar el código de 3 ª parte existente, entonces le sugiero que vaya a través de cada IFDEF definido para su validación. Algunos proveedores no utilizan las llamadas estándar IFDEF VERxxx, sino que crean su propia que podría llamarse algo así como VER70UP o algo así. El lugar más común para esto sería en incluir archivos, a fin de buscar una {I ???. $ INC} archivo cerca del comienzo de cada archivo, a continuación, analizar esto para lo que se utiliza y cómo.
La otra razón para analizar cada uno $ DEFINE / $ UNDEF es el hecho de que una versión de uno específico podría convertirse en una nueva definir previamente que su no comprobar ... que en última instancia conduce a código muerto.
El uso GExperts , puede utilizar tanto GrepSearch o GrepRegularExpressions para buscar en el código y luego usar el Reemplazar herramienta en las GrepResults para eliminar todo lo que necesita.
Usted puede hacer una búsqueda y reemplazo operación en todos los partidos de la lista o sólo el archivo / juego seleccionado. Cuando se elige una de estas opciones, aparece un diálogo solicita la cadena que se utiliza en lugar de la emparejado texto. Tenga en cuenta que las formas que se encuentran Actualmente abierto no pueden tener su texto reemplazado, debido a las limitaciones en la IDE. Por favor, cierre todas las formas antes tratando de reemplazar texto en ellos.