/ / gcc -I non cambia la directory include - c ++, gcc, header-files

gcc -I non cambia la directory include - c ++, gcc, header-files

Ho una cartella chiamata code/, sotto questa cartella ho una cartella chiamata include/ e il file sorgente chiamato code.cc, il include/ contiene i file di intestazione a.h, b.he questi due file di intestazione esistono anche da qualche altra parte, al fine di utilizzare i file di intestazione nel file include/ cartella, ho aggiunto una bandiera -Iinclude nel mio Makefile, ma il mio codice usa ancora quei file di intestazione in altri posti, se includo i file di intestazione nel modo seguente, il mio codice usa i file di intestazione sotto include/, perché non è il -I il flag cambia la directory include?

#include "include/a.h"
#include "include/b.h"

modificare: Directory:

code/code.cc
code/Makefile
code/include/a.h
code/include/b.h

Makefile:

CFLAGS = -Iinclude/
CFLAGS += -m32
LDFLAGS = -Llib -llits -lrt -lpthread -Wl,-R,"lib"
code:code.cc
gcc -o code $(CFLAGS) $(LDFLAGS) code.cc

gcc --version:

gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973]
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

risposte:

1 per risposta № 1

Con questa configurazione:

code/code.cc
code/Makefile
code/include/a.h
code/include/b.h

E aggiungendo -Iinclude/ alle bandiere del compilatore, il tuo #include "include/a.h" cercherei include/a.h nel include/ cartella prima. Ad esempio, il compilatore cerca include/include/a.h che non esiste, e il compilatore cerca il include/a.h file altrove nel percorso di ricerca.

Il tuo codice deve essere utilizzato #include "a.h" o il tuo -Iinclude/ dovrebbe essere -I. -IO. aggiunge la directory corrente al percorso di ricerca, ad esempio #include "include/a.h" corrisponderebbe al file ./include/a.h Assicurarsi -I. viene aggiunto prima di qualsiasi altro percorso di ricerca che potrebbe anche corrispondere ai file inclusi.


0 per risposta № 2

L'ordine di -I direttive a gcc è importante. Il -I la direttiva che aggiunge "quei file di intestazione in altri posti" deve venire prima -Iinclude per /include.


0 per risposta № 3

Devi usare

CFLAGS = -I<full_path_to_project>/code

Se include è collocato sotto questa directory e tu includi file relativi ad esso come nella tua dichiarazione di inclusione

#include "include/a.h"
// ^^^^^^^^^

Se si specifica

CFLAGS = -I<full_path_to_project>/code/include

Non è necessario specificare percorsi di inclusione relativi

#include "a.h"

Percorsi relativi specificati con -I inizierà con la directory di lavoro utilizzata da make. Se non c'è una parte relativa del percorso da lì, si omette il -I opzione, o specificare -I./.