The short answer is that library files go in the libraries folder in the Arduino root folder. A library should be in a sub-folder named for the class, and should contain a c++ implementation and header file. Hence, include paths to other header files within the same "other" directory require paths relative to the header location. This seems to me to be, at best, a bit bizarre. Before I noticed this, I was perplexed by editing a .c file in the remote directory (with another editor) and the results NOT appearing in the project.
I'm struggling a bit with Arduino language + its IDE not being 100% real C++. I wrote my own I2C library for a sensor but can't get the IDE's compiler to recognise it. I'm using Ubuntu 18.04. I get no such file or directory for all of these things I've tried: Include the .h file by absolute and relative path in the .ino code A Makefile for Arduino Sketches . This is a very simple Makefile which knows how to build Arduino sketches. It defines entire workflows for compiling code, flashing it to Arduino and even communicating through Serial monitor.