Как включить файл из другого (родительского) каталога
Это моя структура
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