Typically, you would use the
-I
flag to the compiler, e.g.
gcc -I /src/include foo.c
This tells the compiler (actually the c-pre-processor, but we'll let that slide, since the c-pre-processor rarely gets called by itself...) to search /src/include for any files that #included using the double-quote (#include "some_heaeder.h" conventtion.
The #include mechanism does know how to follow relative path names, but note that the path is then relative to the source file, not the location you are compiling from. So if your tree looks like
src
├── include
│ └── myinclude.h
└── project
└── project.c
then an include like
#include "../include/myinclude.h"
looks for an include file that is "up one and down into include" from the location of project.c