domande ho rivisto How to use include directive correctly e C++ #include semantics e né indirizzi questo - né gli altri suggerite da così quando ho digitato il titolo ...Quali sono i vantaggi di un percorso relativo come "../include/header.h" per un'intestazione?
cosa, se del caso, sono i vantaggi di scrittura:
#include "../include/someheader.h"
#include "../otherdir/another.h"
rispetto al utilizzando solo un nome di file semplice:
#include "someheader.h"
#include "another.h"
o forse un nome relativo senza il '..
':
#include "include/someheader.h"
#include "otherdir/another.h"
I problemi che vedo sono:
- Non è possibile spostare un colpo di testa senza preoccuparsi che i file di origine lo includono.
- È possibile finire con percorsi molto lunghi per intestazioni nelle dipendenze e segnalazioni di errori. Ne ho avuto uno oggi con "
../dir1/include/../../include/../dir2/../include/header.h
".
L'unico merito che posso vedere è che, mentre non è necessario per spostare i file in giro, si potrebbe essere in grado di cavarsela senza sempre usando '-I
' direttive per trovare le intestazioni, ma la perdita di flessibilità, e la la complessità della compilazione in sottodirectory, ecc. sembra superare il vantaggio.
Quindi, sto trascurando un vantaggio?
Grazie per gli input. Penso che il consenso sia che non ci sono grossi benefici alla notazione che usa ".." che sto trascurando. In termini generali, mi piace la notazione "somewhere/header.h"; Lo uso in nuovi progetti. Quello su cui sto lavorando è tutt'altro che nuovo.
Uno dei problemi è che ci sono vari tipi di intestazioni, spesso con un prefisso, come rspqr.h
, rsabc.h
, rsdef.h
, rsxyz.h
. Questi sono tutti correlati al codice nella directory rsmp
, ma alcune delle intestazioni sono in rsmp
e altre sono nella directory di inclusione centrale, che non ha sottodirectory come rsmp
in essa. (E ripetete per le varie altre aree del codice: ci sono intestazioni in più posizioni, dovute casualmente ad altri bit di codice.) Spostare le cose è un grosso problema perché il codice è diventato così complicato nel corso degli anni. E i makefile non sono coerenti in cui sono fornite le opzioni -I
. Tutto sommato, è una triste storia di negligenza non benevola su un periodo di decenni. Fissare tutto senza rompere nulla sarà un lavoro lungo e noioso.
Sembra che tu sia a conoscenza di tutti i fattori coinvolti, quindi questa non è davvero una domanda. – shoosh
Sto verificando se ci sono dei benefici che ho trascurato (perché odio la notazione ma ne risento al lavoro). Ho meno problemi con la notazione senza il ".." in essa. –
Questo (usando percorsi relativi) tende a causare enormi mal di testa quando si utilizza una dir di compilazione separata. I.e cd yourproject; mkdir build; cd build; ../configure && make - Se hai intenzione di mantenere il codice, potrebbe valere la pena di aggiustarlo. –