2009-10-05 13 views
5

Mi piacerebbe avere dipendenze di progetto diverse a seconda della configurazione di progetto che sto attualmente costruendo.Come avere dipendenze di progetto diverse per ciascuna configurazione di progetto?

Ad esempio, non desidero creare e collegare SomeTestLib.vcproj nella configurazione di rilascio, ma mi piacerebbe creare e collegarlo ad esso in Debug.

Una soluzione, che funziona sorta, è quello di utilizzare le macro condizionali di compilazione:

#ifdef DEBUG 
#pragma comment(lib, "SomeTestLib") 
#endif 

Ma in questo caso, il debugger e IntelliSense non funzionano per SomeTestLib.
C'è un .sln o .vcproj hack che potrei usare?
Grazie.

risposta

6

Dopo aver cercato Google per giorni, alla fine ho rinunciato a trovare una soluzione a questo problema e ho fatto esplodere uno sviluppatore VS, che mi ha dato una soluzione per questo problema (in realtà, ho provato un bajillion di cose diverse per trovare questo).

Apparentemente, l'IDE non è abbastanza intelligente da capire che hai disabilitato la creazione di una particolare libreria con una determinata configurazione e non aggiungere l'output di quel progetto alla riga di comando del linker per i progetti che dipendono da esso. Sono certo che ne sei consapevole.

Tuttavia, poiché si limita a incollare la riga di output dal progetto di libreria nella riga di comando del progetto dipendente, l'impostazione della riga di output su "" comporterà l'aggiunta di NOTHING alla riga di comando del linker sui progetti dipendenti!

Eventualmente, questo problema verrà risolto in Visual Studio in futuro. Rimango ottimista, perché è il mio IDE preferito, e sono sempre colpito dalle funzionalità che supporta. Tuttavia, alcuni dei thread di aiuto VS che ho visto dicono che questo bug è "di progettazione", quindi forse non lo risolveranno. Sembra abbastanza facile da fare, però.

In ogni modo, per riassumere:

  • Right-Click sul vostro progetto di libreria in Solution Explorer e fare clic su "Proprietà".
  • Passare alla coppia "Configurazione/Piattaforma" per la quale non è stato progettato il progetto di libreria.
  • Selezionare "Proprietà di configurazione -> Librarian -> Generale".
  • Per "File di output", digitare "" (cioè parentesi aperte, spazio, parentesi ravvicinate).
  • Fare clic su OK.

Si noti che questa soluzione vi darà errori se si costruisce o si pulisce il progetto di libreria disabilitato. Se si crea la soluzione, verrà saltata su configurazioni disabilitate, quindi non si otterranno errori.

Spero che questo aiuti!

Daniel

+0

Grazie, è fantastico! Un'altra cosa: se la dipendenza che stai collegando sembra essere un file .dll, puoi anche impostare il nome della libreria di importazione su "" e verrà ignorato. Questa opzione è in Linker-> Avanzate-> Importa libreria. – k0dek0mmand0

0

In Visual Studio, ciascuna configurazione di build mantiene il proprio elenco di proprietà per il proprio progetto. Basta aggiungere la tua lib a qualsiasi configurazione di build che si desidera. Basta non aggiungere "Tutte le configurazioni"

+0

In realtà sto chiedendo di un progetto che è una parte della soluzione, non una lib esterna. Sono a conoscenza dell'opzione che stai suggerendo. Quello che mi piacerebbe ottenere è contrassegnare una dipendenza del progetto inattiva in alcune configurazioni di soluzione. – k0dek0mmand0

0

Fare clic con il tasto destro del mouse sulla soluzione e selezionare Proprietà. pagina delle proprietà Solution apparirà ..

Nella pagina a destra selezionare Proprietà di configurazione >>> Configurazione

Qui è possibile selezionare la configurazione di generazione per il debug, Release e tutto il tipo di costruzione selezionando la casella di controllo etichettata come Genera.

+0

Se ho capito bene, deselezionando un progetto qui ne impedirò la creazione. Ma se questo progetto non controllato è contrassegnato come Dipendenza progetto, il linker si lamenterà (SomeTestLib.lib non può essere trovato). – k0dek0mmand0

+0

Non se è già compilato e l'assembly è presente nella stessa directory. Da quando hai costruito un progetto tutte le sue dipendenze, altre poi quelle installate in GAC vengono copiate nella cartella privata di quell'assembly. Tuttavia dal momento che dipende da altri assembly e viene apportata una modifica all'origine di quell'assembly, prima verranno create tutte le dipendenze. –

+0

OK, ma non voglio nemmeno creare SomeTestLib nella configurazione di rilascio, questo è il punto. :) – k0dek0mmand0

2

È possibile disattivare la proprietà delle dipendenze della libreria Linker/Generale/Collega nel progetto dipendente e inserire la libreria negli input del linker nelle relative configurazioni.

Rende i riferimenti del progetto meno utili, ma è fattibile.

1

Impostare il tipo di configurazione di utilità anziché application/library nelle proprietà del progetto -> Generali ..

0

Nel progetto principale, andare a Configurazione Proprietà -> Linker -> ingresso, in la sezione intitolata "Ignora libreria specifica" aggiunge la lib desiderata, ad esempio: .lib. Fallo di nuovo per l'altra configurazione, eccetto ignorare una diversa lib/dll.

Infine, se non si desidera che ogni progetto venga creato per entrambe le configurazioni, fare clic con il tasto destro del mouse su Soluzione -> Dipendenze progetto -> [Seleziona progetto principale/principale] -> Deseleziona il progetto che non vuoi costruire/ignorato.

Questo metodo ha il vantaggio che è comunque possibile creare manualmente ciascun progetto, se desiderato, ma è possibile cambiare configurazioni e solo costruire/utilizzare la lib/dll desiderata.