Как включить файл из другого (родительского) каталога
Это моя структура
program/
src/
Makefile
main.ino
test.h
...
lib/
i2c.h
В main.ino я включаю test.h, а в test.h я пытаюсь включить i2c.h, но это просто не работает, я продолжаю получать:
make: *** No rule to make target 'i2c.h', needed by 'build-uno/main.ino.o'. Stop.
Я пробовал в том числе и так
// test.h
#include "../lib/i2c.h"
Я также попытался создать символическую ссылку на мою папку lib в библиотеках arduino и добавить ее в качестве библиотеки в Makefile
sudo ln -s /home/pi/program/lib /usr/share/arduino/ библиотеки/GAVR
# Makefile
ARDUINO_DIR = /usr/share/arduino
BOARD_TAG = uno
ARDUINO_PORT = /dev/ttyAMA0
ARDUINO_LIBS = GAVR
include /usr/share/arduino/Arduino.mk
Я также попытался создать символическую ссылку на lib внутри каталога src
ln -s /главная страница/pi/program/библиотека /главная страница/pi/program/src/библиотека
Ничто из вышеперечисленного не возымело никакого эффекта, сообщение об ошибке остается прежним.
Как я могу включить файл из другого каталога в свою программу?
@php_nub_qq, 👍0
Обсуждение1 ответ
Лучший ответ:
Это определенно халтурно и не является правильным решением проблемы, но, тем не менее, это работает, поэтому я делюсь этим.
После создания символической ссылки в каталоге /usr/share/arduino/ libraries вы должны убедиться, что существует файл заголовка с точным именем каталога, по-видимому, именно так настроен arduino для их включения.
В моем случае моя символическая ссылка была названа GAVR, поэтому мне пришлось создать файл GAVR.h внутри моего каталога lib, который затем включал бы мой файл i2c.h и, возможно, любой другой файл, который мне понадобится.
Также в test.h или в любом другом месте, где мне нужно использовать i2c.h, я должен включить <GAVR.h> вместо этого.
Оказывается, также 1 равно false , вам просто нужно включить <GAVR.h> один раз в файл .ino, и его элементы будут доступны везде, как и любая другая библиотека.
Также 2, теперь, когда ARDUINO_LIBS не является пустым в Makefile, вам нужно будет вручную объявить все библиотеки, которые использует ваш код.
- Как создать проект ардуино с несколькими исходными файлами?
- устаревшее преобразование из строковой константы в 'char*'
- Как запрограммировать ардуино на чистом C/C++?
- Количество элементов в массиве char
- Регистры ввода-вывода SAM3X8E (Arduino Due)
- как быстро loop() работает в Arduino
- Arduino: как получить тип платы в коде
- Как вызвать функции C из скетча ардуино?
Это ошибка make, а не ошибка компиляции. Если у вас есть правило для main.ino, где этот файл i2c.h указан как dependency и находится не в том же каталоге, он завершится неудачей. Зависит от каталога Makefile, это может быть ../lib/i2c.h (или вы можете отключить эту зависимость, но если она изменится, она не будет перекомпилирована), @KIIV
@KIIV Я все еще новичок в c, и я действительно не знаю, что я делаю. Мой Makefile находится в каталоге src, и я опубликовал его содержимое. Я не знаю, как я должен указывать каталог
libкак часть процесса сборки. Я нашел много примеров, в которых предлагается добавить-Iвgcc, но arduino makefile творит чудеса, и я не знаю, как добавить параметры в команду компилятора., @php_nub_qqЯ использовал platformio (так как тогда не было интерфейса командной строки). 1. библиотеки обычно находятся в собственном подкаталоге, поэтому может потребоваться что-то вроде lib/i2c_lib/i2c.h и ARDUINO_LIBS=/home/pi/program/lib, @KIIV
Если вы не знаете, что вы делаете с Makefile (а Makefile - это черная магия), то вам действительно не следует его использовать. Если вы должны использовать командную строку, то вместо этого используйте
ardiuno-cli. Также имейте в виду, что сборка обычно выполняется не в исходном каталоге, а в отдельном каталоге сборки в другом месте., @Majenko@Majenko вероятно, есть много вещей, которые я делаю неправильно, но все, о чем я забочусь, это о том, чтобы моя программа работала так, как я ожидаю, все остальное - шум. Это хобби-проект, над которым я работаю в одиночку, так что никто не пострадает от моего невежества, и я, скорее всего, никогда не буду профессионально работать с C, так что все в порядке. Думаю, я последую совету, если не смогу найти способ заставить Makefile работать., @php_nub_qq
Вы можете столкнуться с той же проблемой с
arduino-cliиз-за того, как выполняется сборка Arduino - не в исходном каталоге. Вам нужно будет определить, каков путь к каталогу сборки относительно того, где находится ваш файл. Однако, если вы используете правильную библиотеку, то "arduino-cli" будет знать это и справится со всем этим за вас., @Majenko@Majenko Кажется, я нашел решение, следуя символической ссылке на
/ usr / share / arduino / libraries / GAVR, мне просто нужно было создать файлGAVR.h, который включает в себя другие мои файлы. Это, вероятно, заставило бы настоящего программиста на C съежиться, но для меня это работает, поэтому я не уверен, следует ли мне использовать это в качестве ответа или вообще удалить вопрос., @php_nub_qqСформулируйте это как ответ. Это может кому-то помочь. И эй, если это сработает, то сработает. В C существует больше мнений, чем правильных и неправильных., @Majenko