2011-01-10 4 views
15

Sto cercando di creare gtest su Visual Studio 2010. Dopo aver convertito il file della soluzione, ho provato a creare e ho ricevuto i seguenti messaggi di avviso.

Warning 1 warning MSB8012: 
TargetPath(C:\Users\sucho\Desktop\gtest-1.5.0\msvc\gtest/Debug\gtest.lib) does not match 
the Library's OutputFile property value (C:\Users\sucho\Desktop\gtest-1.5.0\msvc\gtest\ 
Debug\gtestd.lib). 

This may cause your project to build incorrectly. 
To correct this, please make sure that $(OutDir), $(TargetName) and $(TargetExt) property 
values match the value specified in %(Lib.OutputFile). 
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets 

Il messaggio dice che ho bisogno di variabili di setup $(OutDir), $(TargetName) e $(TargetExt), insieme con i valori delle proprietà specificati in %(Lib.OutputFile).

Come posso farlo con Visual Studio (in particolare VS 2010)?

+0

Verificare questo: [Come risolvere MSB8012 (Lib.OutputFile)?] (Http://connect.microsoft.com/VisualStudio/feedback/details/523864/how-to-fix-msb8012-lib-outputfile) [Visual Studio 2010 - $ (TargetName) macro] (http://social.msdn.microsoft.com/Forums/en/vcprerelease/thread/3c03e730-6a0e-4ee4-a0d6-6a5c3ce4343c) –

risposta

3

L'avvertimento è spuria - supponendo che si sta utilizzando Google prova, funziona bene

È possibile farlo andare via comunque. Fare clic con il tasto destro del mouse sul progetto incriminato e selezionare Proprietà. Seleziona "Bibliotecario" nella vista ad albero sul lato sinistro e modifica l'elemento "File di output" a destra facendo clic sulla casella accanto al file di output e selezionando "Eredita da padre o impostazioni predefinite del progetto".

+4

Questa non è la risposta corretta. Questo * modifica * il nome del file di output, sia la versione di debug che la versione di rilascio di .lib sono ora chiamati gtest. Qualunque cosa sia stata costruita per ultima, sovrascriverà il file. Ha messo in difficoltà l'OP quando ha finito per collegare la versione di rilascio di .lib alla build di debug del codice che voleva testare. Ha cancellato quella domanda più tardi, presumo che lo abbia capito. –

+1

@Hans: non vero. Visual Studio mette già questi file in cartelle separate. L'extra "d" è richiesta solo se si decide di copiare le librerie in un'unica directory. –

+0

cosa succede se voglio che il nome rimanga lo stesso? Penso che la risposta fornita da @HansPassant sia più corretta. – alariq

23

Lo vedo. Fare clic con il tasto destro del mouse sul progetto gtest, Proprietà, Proprietà di configurazione, Generale. Assicurati che la configurazione di Debug sia selezionata (in alto a sinistra). Modificare la proprietà Nome Target per

$(ProjectName)d 

Annotare il aggiunto "d" per cambiare il nome da GTEST a gtestd. L'avvertimento è altrimenti benigno.

2

Questo tipo di errori si verificano in genere quando si aggiorna il vecchio progetto alla nuova versione di Visual Studio (come nel caso in VS2010) e anche se le impostazioni del progetto possono essere state modificate manualmente (ad esempio cambiando il nome dell'eseguibile). Sappiamo che VS2010 utilizza queste macro $(ProjectName)$(TargetName)$(OutDir)$(TargetExt) per controllare le uscite di rilascio/debug ma spesso è un mistero dove cambiarle. Noi rispetto al tipico ricorso a cambiare il nome dei file di output direttamente tramite Progetto >> Proprietà. Ciò significa che ora dobbiamo modificare separatamente i file di output per debug e release build e se ci sono delle dipendenze, otterremo un errore come This may cause your project to build incorrectly..

Queste macro/proprietà sono valori predefiniti di VS2010 ma è possibile impostarle in file .vcproj modificandole nel blocco note. Nota innanzitutto cerca la proprietà nel file .vcproj, se è lì che cambia il suo valore, se non lo definisce come di seguito.

<PropertyGroup Label="My Values"> 
    <ProjectName>New_Project_Name</ProjectName> 
    </PropertyGroup> 

sopra ho definito un nuovo <property group> per mantenere questi valori, ma è possibile definire ovunque. Lo definisco all'inizio del file subito dopo il gruppo di configurazione debug/release, quindi è visibile ovunque. Assicurati che le proprietà del tuo progetto siano configurate correttamente per usarle correttamente (dovrebbero essere le impostazioni predefinite di VS2010). Se li hai cambiati, dovresti copiarlo dal nuovo progetto di test. Naturalmente puoi anche aggiungere gli altri macro che vuoi impostare per i valori nel gruppo sopra.

È anche possibile verificare i nuovi valori di questa macro tramite le proprietà del progetto. Ad esempio, fare clic su Proprietà di configurazione >> Generale e in "Nome destinazione". Seleziona modifica. Verrà visualizzata una finestra di dialogo con il pulsante 'MACROS >>'. Fai clic e questo ti mostrerà qual è il valore di ogni macro. Dovrebbe riflettere correttamente i nuovi valori impostati nel file .vcproj.

+0

Grazie. Ho cercato come impostare quei simboli del tempo di costruzione per un lungo periodo. –

+0

@zadane - perdona la mia ignoranza ... Per VS2010, 'OutputDirectory' e' OutputFile' sono impostati correttamente dopo VCUpgrade. Tuttavia, 'TargetName' e' TargetExt' sono mancanti. Come possiamo usare il tuo trucco per aggiungere 'TargetName' e' TargetExt' a, diciamo, VS2005 in modo che sopravviva a un aggiornamento VS2010 (e le cose "funzionano" solo per un utente VS2010)? Vedi anche [Come modificare TargetName e TargetExt cambiando l'XML del file di progetto?] (Http://stackoverflow.com/q/33058709) – jww

+0

@jww il link che hai fornito non funziona più. – zar

8

penso che nessuno ha la risposta giusta, ho risolto in questo modo: in pagine delle proprietà del progetto, controllare se linker->General->Output file partita configuration properties->General->target name & configuration properties->General->target extension.

Non è necessario aggiungere alcun 'd', ovviamente, è più semplice impostato su Inherit from parent or project defaults, per tutte e 3 le variabili.

Esempio:

Linker → General → Output File = "myproject.exe" 

poi:

Configuration Properties → General → Target Name = "myproject" 

configuration properties → General → Target Extension = ".exe" 
0

Lo sfondo di questo è che Microsoft ha cambiato il significato del $ (TargetName) macro. Indicava "qualsiasi nome di file inserito in Linker | File di output, meno l'estensione". Lo hanno cambiato in "di default, il nome del tuo progetto". (Questo è qualcosa che non dovresti mai fare, a mio avviso: dovrebbero aver aggiunto una nuova macro).

Mentre VS2008 e precedenti erano in grado di analizzare il nome del file fuori dall'impostazione di Linker, apparentemente non erano in grado di analizzarlo nella migrazione a versioni più recenti, lasciando le nostre configurazioni interrotte.

L'avviso stesso non è probabilmente importante, ma se si utilizza $ (TargetName), ad esempio passandolo a un file batch, questa modifica interromperà il processo batch.

Per noi, la soluzione è stata copiare il nome del file (estensione minus) da Linker | File di output in generale | Nome target, quindi impostare Linker | File di output per "ereditare da padre/predefinito". Questo perché utilizziamo suffissi come "d" (per il debug), "u" per Unicode, _64 per 64-bit e così via.

D'altra parte, se il file di output corrisponde sempre al nome del progetto, allora tutto ciò che dovete fare è impostare Linker | File di output per "ereditare il valore predefinito" e in linea di principio è necessario - a condizione che la directory di output che si desidera per il file compilato corrisponda a Generale | Cartella di destinazione.

Questo cambiamento è assolutamente esasperante perché implica il trasferimento letteralmente di centinaia di impostazioni, tutto a causa della pura e semplice pigrizia da parte di Microsoft, per quanto posso vedere.