2010-09-08 11 views
8

"Percorso libreria" dovrebbe puntare ai file sorgente dei pacchetti? La documentazione di Delphi 7 dice sì. Ma altre persone dicono no: "Il percorso" Libreria "dovrebbe portare a file compilati (.dcp, .dcu) e (se necessario) file di risorse (.res, .dfm) solo"."Percorso libreria" dovrebbe puntare ai file sorgente dei pacchetti?

Aggiornamento:
Il fatto è che se NON si aggiunge il percorso ai pacchetti nel "Percorso libreria", ogni volta che si crea un nuovo progetto DPR, è necessario raccogliere manualmente il percorso dei pacchetti (molti) e inseriscili nella casella "Sfoglia" dell'opzione del progetto, altrimenti otterrai "file xxx.dcu non trovato". Questo non sembra così carino. Per anni ho aggiunto tutti i miei percorsi in Libreria e non ho mai dovuto aggiungere manualmente i percorsi ogni volta che creavo un nuovo progetto.

  • I miei pacchetti sono universali/globali (non specifici per un singolo progetto ma per molti progetti).
  • Uso un solo computer per la programmazione, quindi non mi interessa condividere il codice.
  • Ho i file PAS e DCU nella stessa cartella.
  • Non mi interessa ricompilare spesso i file PAS. La compilazione richiede 1-2 secondi, la ricostruzione richiede 3-4 secondi.
  • I percorsi relativi SONO FUORI DI DOMANDA perché "Delphi (tutte le versioni) sembra cambiare la directory di lavoro a volte all'apertura dei file, che a sua volta incasina i percorsi relativi (sono relativi alla directory di lavoro, non al file .dpr (oj) a quanto pare). Se noto questo, apro un file (usando file-> Apri) nella directory di lavoro, e tutto va bene di nuovo. "
  • Io uso di modificare la maggior parte dei pacchetti molto in un solo giorno.

Delphi 7 è un tale caos quando sull'impostazione dei percorsi e documentazione ufficiale è 0. :(

UPDATE:.
ho fatto il cambiamento Funziona, ma non anche da lontano perfetto (o almeno elegante):. How to remove duplicate resources (RES, DFM) while using Delphi with non specific Library paths?

+1

Se i pacchetti sono "globali", inserirli nel percorso della libreria. Se mettere sorgente .pas dipende da come gestisci e usi questi pacchetti, se li modifichi e li compili separatamente o meno. Ricorda che se non usi pacchetti run-time, le applicazioni compilate non si preoccupano se un dcu proviene da un pacchetto o meno - il linker aggiungerà semplicemente il codice necessario all'eseguibile, e il compilatore ne compilerà uno qualsiasi. è necessario, se riesce a trovarlo. –

risposta

4

L'OP ha detto in un commento:

Il fatto è che se non si aggiunge il percorso dei pacchetti nel "Percorso libreria", quindi ogni volta che si crea un nuovo progetto DPR avete per raccogliere manualmente il percorso dei tuoi pacchetti (molti) e inserirli nella casella "Sfoglia" dell'opzione del progetto, altrimenti otterrai "file xxx.dcu non trovato"

Non proprio. È necessario creare un'opzione di progetto predefinita. Per farlo, carica Delphi (sto parlando di D2010 qui, ma la stessa funzione è disponibile, almeno, D7) e assicurati che non ci sia un progetto caricato in IDE.

Dopodiché, apri un file (qualsiasi file) e vai a Progetto/Opzioni predefinite/Delphi (o C++ Builder, avrai la scelta della personalità). Ciò aprirà una schermata delle opzioni di progetto di base. Configuralo fino a quando non sei felice e premi OK.

Creare un nuovo progetto con File/New/VCL Forms Application e vedere applicate le impostazioni predefinite.

MODIFICA: poiché XE2, il progetto predefinito è stato sostituito da Option Sets.

link Aiuto: Guarda http://docwiki.embarcadero.com/RADStudio/en/IDE_Changes_for_XE2#Default_Checkbox_Removed_from_Project_Options_Pageshttp://docwiki.embarcadero.com/RADStudio/en/Option_Sets_-

_Creating, _Applying, _Editing, _and_Deleting - saperne di più visita: http://codeverge.com/embarcadero.delphi.ide/project-options-default-xe2/1058015#sthash.oovBcggS.dpuf

1

dico di no, perché è più veloce per compilare l'applicazione come la Deus sono già compilati

+0

Il fatto è che se NON aggiungi il percorso ai tuoi pacchetti nel "Percorso libreria" allora ogni volta che crei un nuovo progetto DPR devi raccogliere manualmente il percorso dei tuoi pacchetti (molti) e inserirli nel Opzione "Sfoglia" del progetto, altrimenti otterrai "file xxx.dcu non trovato". Questo non sembra così carino. – Ampere

+1

Bene, dipende - se sono pacchetti da utilizzare in tutti i progetti, ad es. componenti di terze parti, è possibile aggiungere il percorso dcu alle impostazioni della libreria globale.In caso contrario, se si tratta di un pacchetto utilizzato solo in determinati progetti, sì, lo si aggiungerebbe singolarmente a ciascun progetto. –

2

Suggerisco di utilizzare il percorso della libreria "globale" per indicare solo le tue librerie "globali". Se .dcu viene trovato prima di .pas, verranno utilizzati senza ricompilare il codice sorgente. A meno che tu non modifichi spesso il codice sorgente della tua libreria, lo eviterei e non lo "inquinerei" con codice specifico dell'applicazione. Il dcu specifico per applicazione IMHO non deve essere inserito nel percorso della libreria "globale". È possibile utilizzare facilmente la "Directory di output unità" per memorizzare dcu in una directory comune per applicazione

+0

"Se .dcu sono trovati prima di .pas" - Come fare? Intendi le DCU del DPR o delle DCU dei pacchetti? – Ampere

+2

AFAIK quando Delphi cerca un'unità se trova un .dcu adatto prima di un .pas che lo userà (a meno che non imposti una build). Per ottenerlo è sufficiente avere il percorso .dcu prima del percorso .pas (o per evitare il percorso .pas interamente). Questo è uno dei motivi per mantenere .pas e .dcu in diverse cartelle, specialmente per le librerie, per evitare una compilazione per compilare le librerie. Per i pacchetti, dipende da come li usi. Se si utilizzano pacchetti di runtime, il linker utilizzerà i file .dcp, non .dcu. Se si utilizzano i pacchetti solo per aggiungere componenti all'IDE e quindi collegare staticamente, sono necessari i pacchetti .dcu –

5

Il punto in cui si punta il percorso della libreria non è la metà importante di quello in cui si puntano i percorsi di output per i file compilati, entrambi i dcu/file dcp e file exe/bpl.

Ogni progetto deve avere i propri percorsi di uscita. Se si esegue questa operazione, anche quando si punta il percorso della libreria ai file di origine, i file binari si troveranno in una cartella specifica del progetto e pertanto non può mai interferire con altri progetti con lo.

Fare attenzione all'utilizzo del percorso della libreria globale (opzioni di ambiente). Il mio è in realtà completamente vuoto.Neanche le cartelle Delphi standard come $ (BDS) \ Lib ci sono. Perché? Perché garantisce che ogni progetto debba rendere esplicite le sue dipendenze dalle librerie nel dproj. Ciò significa che è possibile caricare e creare progetti che richiedono versioni diverse della stessa libreria senza errori, perché i percorsi dell'ambiente puntano a una versione diversa della libreria rispetto alla versione richiesta dal progetto. Il che aiuta molto anche quando si esegue il debug perché il debugger utilizzerà sempre la versione richiesta dal progetto, invece di ciò a cui il percorso dell'ambiente globale sta puntando.

Se una delle tue librerie ha componenti visive, non è ancora necessario sui percorsi di ambiente globale. Devi solo assicurarti che l'IDE usi i bpl dalla versione che usi di più. Non importa se è vecchio o meno (a parte il fatto che potrebbe causare modifiche al contenuto di dfm, ma il controllo della versione di origine dovrebbe essere d'aiuto). Hai solo bisogno di BPL nell'IDE, in modo che non ti venga a mancare quando carichi un modulo. In effetti il ​​mio IDE di solito non ha componenti di terze parti installati (anche se i progetti li usano), ma poi non faccio molto lavoro dfm e quando ho bisogno di cambiare il codice nel file pas di un modulo, dico semplicemente all'IDE di ignora tutti gli errori (ma mantieni i riferimenti! nell'unità del modulo) e ripristina le eventuali modifiche ai dfm al momento dell'invio.

Oh, e Compilano sempre dalla sorgente. In questo modo se ottengo una patch per un singolo file in una libreria, non devo passare attraverso un intero processo di installazione, non ho nemmeno bisogno di ricompilare i pacchetti di componenti. Posso semplicemente mettere il file sorgente aggiornato nella cartella corretta e continuare come se nulla fosse accaduto.

Inoltre, utilizzo i percorsi relativi in tutti i miei progetti. So che alcune persone ne hanno sofferto, ma non ho mai riscontrato un problema. Forse perché non apro mai nessun file facendo doppio clic su Esplora risorse di Windows, ma sempre dall'interno dell'IDE o, eventualmente, trascinandolo da Explorer per visualizzare un file (versione precedente di) senza renderlo parte di un progetto. I percorsi relativi rendono più facile e veloce caricare copie di un progetto, avere un numero qualsiasi di spazi di lavoro (Perforce) e passare da uno all'altro senza dover "aggiustare" i percorsi nel dpr.

Tutte le pratiche sopra elencate sono state prese in considerazione lavorando con molti progetti diversi, cambiando regolarmente avanti e indietro tra le versioni del nostro codice, che spesso comporta il passaggio da una versione di libreria all'altra.

+1

"Non è nemmeno necessario ricompilare i pacchetti di componenti". Bene, pericoloso, se il tuo cambiamento ha un impatto anche sul comportamento in fase di progettazione fino a quando ricompili i pacchetti, usano ancora il vecchio codice. Il tuo modo di lavorare con dfm richiede molta attenzione .. troppo, IMHO :) –

+2

@Idsandon: in realtà no, perché non faccio affidamento sul comportamento del tempo di progettazione. Non mi interessa molto l'aspetto di un controllo in fase di progettazione. È impostato e personalizzato nel codice. Il dfm viene principalmente utilizzato per scopi di layout e eventi di hookin (se siamo troppo pigri per farlo in codice). E il mio modo di lavorare con dfms non richiede molta cura. O non controllo il dfm o lo ripristino immediatamente. Inoltre è mia/nostra pratica standard rivedere tutte le ** modifiche ** prima di inviarle alla SVC, quindi qualsiasi modifica involontaria a qualsiasi file estratto (dfm, pas, inc, dpr) non passerà. –

+0

"Non mi interessa molto l'aspetto di un controllo in fase di progettazione". Penso che le tue forme non siano abbastanza complesse. Se lo sono, quindi non vedo il punto di usare Delphi. Sconfigge il suo scopo (i suoni della RAD sono familiari?). Inoltre, ho perso file e progetti da aprire/lavorare con. Non essere in grado di usare azioni standard di Windows (come il doppio clic) solo per usare (il pericoloso) percorsi relativi ..... troppo per un programmatore pigro come me. – Ampere

2

La tecnica che descrivo qui di seguito funziona bene perché, per qualsiasi versione di Delphi che stiamo usando, tutti i progetti usano la stessa versione di librerie.

Ad esempio, abbiamo un ramo che è stato costruito (e ancora attivamente sviluppato) utilizzando Delphi 6. Il nostro tronco è stato migrato a Delphi 2009 più di un anno fa, quindi migrato al 2010 un paio di mesi fa, e sarà presto migrato a Delphi XE. Ma tutti i progetti nel trunk useranno la stessa versione di Delphi e la stessa versione delle nostre librerie.

I fornitori di componenti di terze parti amano installare l'origine in un percorso condiviso e quindi utilizzare diverse cartelle di output per il codice compilato. D'altra parte, preferisco installare una copia separata di ogni libreria di terze parti per ogni versione di Delphi installata. Se installo una "versione 5.4" aggiornata di una delle mie librerie di componenti preferite, potrei non volere che la singola installazione si applichi ad ogni versione di Delphi che sto usando. Quindi ogni libreria di componenti viene installata separatamente per ciascuna versione di Delphi installata. (Questo è un problema quando la libreria utilizza un programma di installazione "tipico" di Windows, che non desidera installare più volte lo stesso prodotto.)

Detto questo, il percorso della nostra biblioteca globale in Strumenti | Opzioni punta a le cartelle OUTPUT di tutte le librerie di terze parti.In questo modo, ogni nuovo progetto è pronto per l'uso senza alcun lavoro aggiuntivo e la compilazione di qualsiasi progetto non ricompone il codice della libreria di terze parti standard che non cambia quando un progetto cambia.

Nella rara istanza abbiamo bisogno di una patch (codice sorgente sovrascrittura) su una libreria di terze parti, che vanno in una cartella separata e vengono compilate ogni volta che il progetto viene compilato. Una volta che la terza parte rilascia un aggiornamento con la correzione inclusa, rimuoviamo la nostra copia della patch.

Utilizziamo librerie di terze parti che contengono molto codice sorgente, come ReportBuilder, Raize Components, i prodotti TurboPower, ecc. Non vedo alcun motivo per ricompilare tutto il codice ogni volta che "Costruisco" il mio progetto.

0

Anche se le risposte fornite qui sono definitivamente buona e corretta (ognuno riceve un voto alto), dopo aver sperimentato un po 'ho deciso di mantenere il mio precedente (KISS) impostato. Ha funzionato per anni e funzionerà per molti altri. Lo so, scambia velocità (ricompilando il codice sorgente) per la stabilità, ma tiene a bada i "percorsi, librerie, sorgenti, cartelle di navigazione e di output". Non devo più preoccuparmi dei percorsi delle impostazioni (eccetto la prima volta quando installo Delphi ma questo può essere automatizzato) o per uscire dal progetto Delp Delp corrente e caricare una libreria DPK e compilarla ogni volta che aggiungo delle modifiche.

Problemi correlati