Jak sprawić, by g++ szukał plików nagłówkowych w określonym katalogu?
Mam projekt (bibliotekę), który jest podzielony na kilka katalogów z kodem w nich. Chciałbym, aby g++ szukał plików nagłówkowych w katalogu głównym projektu, więc mogę uniknąć różnych ścieżek dołączania dla tych samych plików nagłówkowych w wielu plikach źródłowych.
Głównie katalog root/
posiada podkatalogi A/
, B/
i C/
, z których wszystkie mają .hpp
i .cpp
pliki w środku. Jeśli jakiś plik źródłowy w A chciał dołączyć file.hpp
, który był w B, musiałby to zrobić tak to: #include "../B/file.hpp"
. To samo dotyczy innego pliku źródłowego, który był w C. Ale jeśli sam a miał podkatalogi z plikami, które wymagały file.hpp
, to byłby niespójny i powodowałby błędy, gdybym zdecydował się przenieść pliki(ponieważ ścieżka dołączania byłaby "../../B/file.hpp"
).
Musiałoby to również działać z innych projektów, które znajdują się poza root/
. Wiem już, że istnieje możliwość ręcznego skopiowania wszystkich plików nagłówkowych do domyślnego katalogu wyszukiwania, ale chciałbym to zrobić w ten sposób opisane.
Edit: Wszystkie programy korzystające z biblioteki muszą kompilować się tylko z g++ prog.cpp lib.a -o prog
. Oznacza to stałe ustawianie ścieżki include dla g++!
4 answers
A / kod.cpp
#include <B/file.hpp>
A / A / code2.cpp
#include <B/file.hpp>
Kompiluj używając:
g++ -I /your/source/root /your/source/root/A/code.cpp
g++ -I /your/source/root /your/source/root/A/a/code2.cpp
Edit:
Możesz użyć zmiennych środowiskowych, aby zmienić ścieżkę wyszukiwania plików nagłówkowych przez g++. Ze strony man:
Niektóre dodatkowe zmienne środowiska wpływają na zachowanie preprocesor.
CPATH C_INCLUDE_PATH CPLUS_INCLUDE_PATH OBJC_INCLUDE_PATH
Wartość każdej zmiennej jest listą katalogów oddzielonych znakiem specjalnym, podobnie jak PATH, w których można szukać nagłówka pliki. Znak specjalny, "PATH_SEPARATOR", jest zależny od celu i określony w czasie budowania GCC. Dla celów Microsoft Windows To jest średnikiem, a dla prawie wszystkich innych celów jest dwukropkiem.
CPATH określa listę katalogów, które mają być przeszukiwane tak, jakby podano za pomocą-I, ale po ścieżkach podanych za pomocą opcji-I na wiersz poleceń. To zmienna środowiskowa jest używana niezależnie od tego, który język jest wstępnie przetwarzany.
Pozostałe zmienne środowiskowe mają zastosowanie tylko podczas wstępnego przetwarzania określonego języka. Każdy z nich określa lista katalogów, które mają być przeszukiwane tak, jakby podano za pomocą opcji-isystem, ale po ścieżkach podanych za pomocą opcji-isystem w wierszu poleceń.
We wszystkich tych zmiennych, pusty element nakazuje kompilatorowi przeszukiwanie bieżącego katalogu roboczego. Puste elementy mogą pojawiają się na początku albo koniec ścieżki. Na przykład, jeśli wartością CPATH jest": / special / include", to ma to samo efekt as-I. - I / special / include.
Istnieje wiele sposobów na zmianę zmiennej środowiskowej. W pytaniu bash możesz to zrobić:
$ export CPATH=/your/source/root
$ g++ /your/source/root/A/code.cpp
$ g++ /your/source/root/A/a/code2.cpp
Możesz oczywiście dodać to w swoim Makefile itp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-29 15:59:14
gcc -I/path -L/path
-
-I /path
ścieżka do włączenia, gcc znajdzie .pliki h w tej ścieżce -
-L /path
zawiera pliki biblioteczne,.a
,.s
o
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-24 05:10:11
Nagłówki zawarte w #include będą przeszukiwane we wszystkich katalogach domyślnych, ale możesz również dodać własną lokalizację w ścieżce wyszukiwania za pomocą arg linii poleceń-I.
Widziałem Twoją edycję możesz instalować nagłówki w domyślnych lokalizacjach zazwyczaj
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
Potwierdź za pomocą dokumentów kompilatora.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-29 15:38:35
To proste, użyj opcji "- B", aby dodać .katalog plików h do ścieżki wyszukiwania.
Np. g++ - B / header_file.h Twój.cpp-o bin / your_command
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-23 23:50:33