2010-02-05 2 views
6

Sono abbastanza nuovo nello sviluppo del codice C/C++ in MSVS ma una delle cose che mi ha già confuso è il motivo per cui, dopo aver aggiunto un set di file di origine e di intestazione al mio progetto in modo che mostrino rispettivamente nelle cartelle MSVS "File sorgente" e "File di intestazione", devo successivamente dire al compilatore dove sono i miei file di intestazione in "Progetto-> Proprietà-> C/C++ -> Generale". Mi sembra che MSVS dovrebbe già tentare di risolvere qualsiasi affermazione "include" ... "" guardando prima attraverso il set di file header che ho incluso nel progetto.File di intestazione del progetto MS Visual Studio

Qualcuno si preoccupa di commentare la logica utilizzata qui?

Grazie, Travis

risposta

2

In realtà, aggiungendo i file di intestazione nella cosiddetta cartella "File di intestazione" è facoltativa. Anche senza fare lo stesso puoi semplicemente specificare il percorso dell'intestazione in "Progetto-> Proprietà -> ...." e funzionerà ancora.

Si potrebbe pensare dal punto di vista dei soli file di intestazione del progetto che possono essere aggiunti nella cartella "File di intestazione", per quanto riguarda un grande progetto con diverse librerie di terze parti, non si può assolutamente andare e continuare ad aggiungere ogni singola intestazione file nella tua cartella.

Quindi, per mantenere tutti gli include unificati in una configurazione, questo modo avrebbe dovuto essere selezionato.

Tutte le cose citate sopra sono solo la mia comprensione. Non ho alcuna prova per sostenere questo. Quindi, le mie scuse in anticipo è che questo è sbagliato. Non mi bombardare con i Downvotes per favore. :)

+0

Grazie Jay per la tua risposta. Sono d'accordo che i progetti di grandi dimensioni richiederebbero ancora la funzione "Progetto-> Proprietà". Detto questo, penso ancora che il compilatore del progetto faccia automaticamente riferimento ai file di intestazione del progetto per #include la risoluzione è una funzionalità intuitiva che potrebbe essere facilmente implementata senza entrare in conflitto con la necessità di ulteriori directory esterne. Riconosco una certa logica nella tua argomentazione secondo cui un meccanismo di configurazione unificato è desiderabile. – Travis

+0

@Travis, Se avessi notato, puoi aggiungere file da qualsiasi cartella sul disco alla cartella "File di intestazione" in IDE. Inoltre, nel tuo file sorgente a volte puoi includere l'intestazione come "#include folder1/myheader.h" per vari motivi. In questo caso è necessario fornire il percorso senza includere folder1 nel compilatore. Ora, per l'IDE per indovinarlo, la struttura delle cartelle nel disco e IDE deve mappare che porterà una restrizione non necessaria in IDE. Detto questo, se nell'IDE ci fosse qualche altra caratteristica user friendly come suggerisci, lo accetterei sicuramente. :) – Jay

2

Il rilevamento dei file di intestazione deve essere deterministico. Ci possono essere più file con lo stesso nome nel tuo progetto. In tal caso, come vorresti che il compilatore risolvesse questa confusione?

Un'altra cosa è che disporre di directory in cui cercare i file di intestazione è una caratteristica storica di (più o meno?) Tutti i compilatori.

Questo ti lascia con l'unico uso di file di intestazione nel tuo progetto di Visual Studio: essere in grado di aprirli facilmente da Visual Studio. Questo è tutto !

+0

Grazie Benoit per la tua risposta. Anche se sono d'accordo con te sul fatto che l'unico uso dei file header in un progetto VS sembra essere facile per aprirli, penso che questo sia probabilmente un difetto di progettazione o almeno non intuitivo. Come ho menzionato in un precedente commento, non sono sicuro di quale sia lo scopo del filtro/delle cartelle secondarie se non di fornire spazi dei nomi separati che imitano i percorsi deterministici #include nel codice sorgente. Ad ogni modo, apprezzo la tua assistenza per aiutarmi a capire il paradigma dello sviluppo VS. – Travis

1

Prima di tutto, hai creato un nuovo progetto C/C++? Se è così dovrebbe creare una directory in un posto di tua scelta. Una volta eseguita questa operazione, è possibile fare clic con il pulsante destro del mouse sul progetto (nella finestra della soluzione in MSVS) e aggiungere un nuovo file al progetto. Ad esempio, è possibile aggiungere un file di origine (.cpp) e un file di intestazione (.h) al progetto. Fatto ciò, è necessario scrivere #include "yourfile.h" nel file sorgente per poter includere il file di intestazione nel file sorgente. Si noti che è possibile aggiungere nuovi file e file esistenti. Spero che aiuti!

+0

Sì, ho creato un progetto C/C++ ma l'ho fatto utilizzando la "procedura guidata codice esistente". Stavo cercando di ottenere una base di codice open source di terze parti da compilare sotto Windows. Il mio obiettivo era NON dover cambiare alcun codice sorgente da quando questo codice base era già compilato sotto Linux e MacOS. Come tale, non volevo davvero dover cambiare le affermazioni #include. Grazie per la tua risposta però. – Travis

+0

Non credo che debba modificare alcun codice ... Se si crea un nuovo progetto, è sufficiente aggiungere i file esistenti al progetto e questo è tutto. – Partial

3

I file di progetto vengono utilizzati dall'IDE per tenere traccia dei file, ma il compilatore non ha accesso a tali informazioni. Il percorso del file include viene passato a ogni file sorgente quando viene compilato.

+0

Mentre la domanda usa la frase "dice al compilatore", è abbastanza chiaro dal contesto che intende nelle impostazioni del progetto dell'IDE. Non è raro (anche se è impreciso, in senso stretto) chiamare l'IDE "il compilatore". –

+0

Sì, grazie, stavo parlando dell'IDE. Come ambiente di sviluppo integrato ho pensato che avrebbe integrato i file di progetto con il compilatore in modo che i dettagli dell'elaborazione della riga di comando fossero in gran parte astratti. Capisco ora che l'IDE è in qualche modo un rivestimento piuttosto sottile sul compilatore rispetto a quello che inizialmente mi aspettavo. Grazie per aver risposto. – Travis

3

Penso che sia perché avere un'intestazione in una directory non significa necessariamente che si desidera che la directory cerchi altre intestazioni. Quella intestazione particolare potrebbe essere inclusa specificando il percorso dell'intestazione, oppure potrebbe essere trovata implicitamente perché si trova nella stessa directory del file che lo include.

Tutto ciò che ho detto (ed è solo speculazione), penso che quello che vuoi sia una richiesta ragionevole (è qualcosa che mi ha causato un po 'di frustrazione prima) - almeno come opzione o richiesta.

+0

Come dici tu, non è un grosso problema una volta realizzate le impostazioni corrette. Lo menziono solo perché sembra che un comportamento così semplice e intuitivo sia implementato dall'IDE. Se uno sviluppatore si prende la briga di aggiungere file inclusi al progetto, l'IDE, a mio parere, dovrebbe considerarli per qualsiasi affermazione #include. Ho notato che l'IDE consente di configurare le cartelle di sottotitoli (penso che li chiamino "filtri"?) In modo da imitare la struttura di directory prevista dal codice sorgente. Perché farlo se il percorso completo deve essere specificato nelle proprietà del progetto? Comunque, grazie per la tua risposta. – Travis

0

non avevo mai visto questo problema.una volta creato un progetto e aggiunto lo stesso file di intestazione della cartella del progetto in IDE al progetto, è possibile aggiungere il file di intestazione includendo #include e compilando il codice sorgente. se il file di intestazione desiderato non esiste nella stessa cartella in cui crei il tuo progetto, dovresti aggiungere la directory di intestazione nelle proprietà del progetto come hai detto :)