Ok, aqui está como funciona, e eu verifiquei para ter certeza.
Claro que você pode usar caminhos rígidos, mas todo programador odeia usar caminhos rígidos. Eles não são portáteis e bloqueiam seu programa no lugar. Você usa links flexíveis ou físicos para os arquivos no projeto (consulte as páginas de manual em "ln"). Mas ... fale sobre feio! Então a questão é como fazê-lo "corretamente"? A chave é aprender com quais parâmetros e em que caminho o compilador C / C ++ é executado.
Você verá que a conclusão NÃO é intuitiva. Indo direto ao ponto: caminhos relativos não funcionam corretamente. Agora porque?
Mas primeiro, deixe-me explicar por que alguém iria querer colocar arquivos de programa fora do diretório do projeto. Os programadores gostam de escrever classes, estruturas, métodos, funções, macros etc., uma vez. Assim que o programador solidificar o fragmento do programa, ele / ela deseja colocar os arquivos em uma árvore comum e seguir em frente. Todos os programas posteriores poderiam usar essa biblioteca privada. Além disso, ao ter os arquivos em um local central, você não terá várias cópias e versões de cada. Uma biblioteca privada para muitos programas particulares.
A partir da versão 1.6.13 (o Teensy ainda não suporta 1.8. *), O relativo inclui o início da biblioteca , não o seu diretório. Parece que o filtro de ano para C (lembre-se de que o Arduino faz uma "conversão" no destino e depois chama o compilador C / C ++) começa onde você instalou sua árvore do Arduino. No meu caso, eu instalei no "~ / bin / arduino". A casa de Teensy é "./hardware/teensy". O caminho inicial completo para as bibliotecas é "~ / bin / arduino / hardware / teensy / avr / libraries", onde você encontrará todas as árvores do programa de suporte.
Em um arquivo de origem, a instrução '#include "test.hpp"' seleciona corretamente o arquivo do diretório atual. No entanto, se você usar '#include "../test.hpp",' o caminho de inclusão não será iniciado no diretório do projeto. Em vez disso, começa em "./libraries"! Portanto, o caminho resultante é:
#include "../test.hpp" ==> ./arduino/hardware/teensy/avr/libraries/test.hpp
Em conclusão, não há uma maneira limpa de criar sua própria árvore de ferramentas em um diretório próximo. O único curso é comprometer seu trabalho na biblioteca do Arduino e estar ciente dessas regras também.