Я смотрю демонстрационный проект FreeRTOS для порта AVR. Makefile имеет пути к каталогам, в которых находятся исходные файлы RTOS, через директиву -I. Однако в модуле main.c проекта #include не предоставляет пути, подобного этому:
#include "FreeRTOS.h"
Итак, я не могу понять, что директива -I требуется только для компоновщика, чтобы найти объектные файлы? Означает ли это также, что после того, как файлы скомпилированы в объектный код, для GCC они по сути лежат в одной папке, если он знает, где искать?
У меня возникла эта путаница, потому что я видел подобные операторы #include ранее:
#include <avr/io.h>
Если GCC уже знает местоположение io.h, зачем включать перед ним часть avr?
-I
указывает компилятору искать по этому пути файлы заголовков. Именно по этой причине#include "FreeRTOS.h"
не нужен путь. Если бы не было-I
, вам нужно было бы указать полный путь в#include
(что является плохой практикой). - person kaylum   schedule 13.09.2020