Rimozione automaticamente le direttive del compilatore Delphi ifdef
-
19-09-2019 - |
Domanda
Al momento sto lavorando con il codice di 'ereditato' che ha (sparsi in modo casuale in tutta) tutta una serie di direttive del compilatore condizionali in base alla versione di Delphi, tornare a Delphi 2. Da ora in poi, ogni sviluppo sarà con Delphi 2009 o futuri. Esiste uno strumento in Delphi 2009, o un plugin, che rimuoverà automaticamente i segmenti di codice condizionali del compilatore sulla base di una versione specificata 'minima'?
Soluzione
Consiglio vivamente il Delphi Inspiration Pascal preprocessore (DIPP )
Questo può fare un certo numero di cose con un file di origine oltre a rimuovere definisce condizionali, tra cui la "inlining" di includere i file e la rimozione di commenti (tutti ovviamente altamente configurabile e controllabile da opzioni fornite al processore).
La funzionalità definisce condizionale è particolarmente utile in quanto è possibile avere tutte queste condizionali semplicemente rimosso o fornire un insieme di DEFINE di che si desidera applicare. DIPP poi emette un file di origine che riflette quanto sembrerebbe al compilatore con quei simboli definiti, ma senza le direttive condizionali stessi.
Quindi nel tuo caso si dovrebbe semplicemente definito i simboli appropriati per la versione "base" Delphi.
Altri suggerimenti
Si dovrebbe dare JEDI PreProcessor (Pascal PreProcessor) nella JCL un provare.
Nel bagagliaio nel nostro SVN la fonte può essere trovato nella directory JCL / devtools / JPP e nella nostra ultima release (2.1) file zip il jpp.exe può essere trovato nelle DevTools dir.
Non so di un tale strumento, ma dovrebbe essere relativamente semplice e-forward per scriverlo.
- Loop attraverso tutti i file nella directory utilizzando
FindFirst
eFindNext
- Usa
TStringList.LoadFromFile
di leggere tutti i file pas. - Loop attraverso le corde e cercare direttive
{$IfDef}
. Se la versione specificato nella sezione condizionale è più vecchio di D2009 rimuovere tutto il testo fino alla{$EndIf}
. - Usa
TStringList.SaveToFile
per scrivere il file modificato sul disco.
Il mio consiglio sarebbe quello di modificare solo il codice voi completamente gestire. Se invece siete anche andando a modificare il codice 3a parte esistente, allora vi suggerisco di andare attraverso ogni IFDEF definito per la convalida. Alcuni fornitori non utilizzano le chiamate standard IFDEF VERxxx, ma creare la propria, che potrebbe essere chiamato qualcosa come VER70UP o tali. Il luogo più comune per questo sarebbe in include i file, in modo da cercare un file {$ I ???. INC} vicino all'inizio di ogni file, quindi analizzare questo per ciò che viene utilizzato e in che modo.
L'altro motivo per analizzare ogni $ DEFINE / $ UNDEF è il fatto che una versione uno specifico potrebbe accendere una nuova definizione che la precedenza non controllare ... uno che alla fine porta in codice morto.
GExperts , è possibile utilizzare sia GrepSearch o GrepRegularExpressions per cercare nel codice e quindi utilizzare il Sostituisci strumento nelle GrepResults per rimuovere tutto ciò che serve.
Si può fare una ricerca e sostituzione operazione su tutte le partite del lista o solo il file / partita selezionato. Quando si sceglie una di queste opzioni, una finestra di dialogo in cui viene richiesto per la stringa da utilizzare al posto del abbinato testo. Si noti che le forme che sono aperto non può avere il loro testo sostituito, a causa delle limitazioni del IDE. Si prega di chiudere tutte le forme prima cercando di sostituire il testo in loro.