2011-12-28 7 views
9

In questo momento ho 2 piattaforme (Mac e Win32) e 2 configurazioni (versione debug ans). L'intera cosa è sotto SVN.Come configurare correttamente un progetto Delphi XE2 multipiattaforma?

Ecco il layout per l'uscita di costruzione:

.\App\$(Platform)\$(Config) 

Il codice è suddiviso in alcune cartelle e si trova qui:

.\Code\MyProject.dpr 
.\Code\Common\ 
.\Code\Forms\ 
.\Code\Source\ 

file di dati comuni sono qui:

.\Data\ custom data files (dlls, textures, models, etc.) 

Questo lo schema ha però alcuni difetti, che devo risolvere, ma non so come migliorarlo. Voglio avere un solo set di file di dati in SVN sotto la cartella Data, ma ho bisogno di copiarlo sui percorsi .\App\$(Platform)\$(Config) automaticamente su build (nota, alcuni file di dati sono comuni per entrambe le piattaforme, ma alcuni non lo sono). C'è un modo per impostare il processo di compilazione per copiare i file, come fa con Deployment e PAServer? In alternativa, potrei impostare i percorsi su file di dati come ..\..\Data, ma a me sembra strano.

Forse ci sono altre opzioni di cui non sono a conoscenza o il layout del progetto potrebbe essere completamente cambiato? Come impostare la struttura del progetto e la compilazione per la compilazione multipiattaforma?

+0

"file di risorse" ha un significato caricato. La maggior parte degli sviluppatori di windows pensa agli script delle risorse (.res) o al loro equivalente compilato (.rc) che sono incorporati nell'eseguibile dal linker. AFAIK questo è unico per il formato eseguibile portatile utilizzato da Windows. Dal momento che li vuoi copiati nella cartella di output posso presumere che questo non è ciò a cui ti stai riferendo? –

+0

Ci scusiamo per la confusione. Mi riferivo a file di dati (DLL, trame, modelli, ecc.). Ho modificato leggermente la domanda. – Kromster

+1

L'azione PostBuild del progetto non sarà di aiuto? –

risposta

0

Ok, questo è un vecchio post, ma questo è quello che faccio in Delphi (e allo stesso modo in Visual Studio) per aggirare questo problema di avere i diversi eseguibili di output di piattaforma/config in diverse cartelle, ma un insieme comune di dati. Ho una funzione per rimuovere le parti della cartella "sub", quindi la mia app può sempre accedere ai dati comuni nella radice di queste cartelle (nel tuo caso. \ App). Naturalmente è possibile aggiungere ulteriori piattaforme e configurazioni alla funzione ProjectPath come richiesto:

uses System.StrUtils; 
... 
function ProjectPath : string; 
// Removes sub-folders created by the Delphi IDE, so the executable can refer to the source folder, 
// rather than to where the executable is. 
// Excludes trailiong path delimiter 
begin 
    Result := ExtractFilePath (Application.ExeName); 
    Result := System.StrUtils.ReplaceText (Result, '\Win32' , ''); // ReplaceText is case insensitive 
    Result := System.StrUtils.ReplaceText (Result, '\Win64' , ''); 
    Result := System.StrUtils.ReplaceText (Result, '\Debug' , ''); 
    Result := System.StrUtils.ReplaceText (Result, '\Release', ''); 
    Result := ExcludeTrailingPathDelimiter (Result); 
end; 
... 
ConnectionString := 'Database=' + ProjectPath +'\DATAFILE.DAT;etc.';