Как узнать все #define, используемые arduino-cli при компиляции?
Как узнать все #define
, используемые arduino-cli
при компиляции?
Некоторое время назад я что-то видел, но больше не могу найти. Я думаю, что где-то был какой-то вариант, и в результате компиляция не завершилась нормально, но какой-то сгенерированный файл содержал много полезных и много непонятных определенных имен.
Мне хотелось бы найти все, что определено в моей программе, которую я хочу написать, скомпилировать и затем запустить на разных Arduinos, но иногда требуется использовать разные последовательные порты, разные назначения контактов, разные размеры внутреннего буфера и т. д. включено.
И мне хотелось бы лучше организовать различия, а не просто помещать все и вся в один большой #ifdef
- #endif
для каждой дополнительной платформы.
Что-то вроде:
- если у него нет
Serial
, ноSerial1
,#define Serial Serial1
- если у него 2 КБ ОЗУ или меньше, установите MY_BUF_SIZE равным 10; если его размер меньше 3 КБ, используйте 30, иначе используйте 100.
- но если это
Micro Pro
, используйте это назначение контактов, иначе, если этоNano Every
, используйте это, иначе выдайте ошибку/предупреждение для пользователя, что контакты должны быть быть назначен.
И многие другие...
@gilhad, 👍2
Обсуждение1 ответ
Лучший ответ:
Я не знаком с arduino-cli. Если вам удастся найти g++
командную строку, которую он использует для компиляции вашего скетча, тогда вы можете получить
список, который вы ищете, используя модифицированную версию этой команды:
- добавьте параметры
-E -dM
- найдите параметр
-o выходной_файл
и измените имя вывода файл на что-нибудь более подходящее.
Изменить. Следуя предложению @gilhad, вы можете создать необходимые
командной строки, передав вывод arduino-cli через sed
:
arduino-cli compile | \
sed -n '/g++.*\.ino\.cpp\.o/{s/-MMD//;s/-o .*/-E -dM -o defines.dump/;p}'
Большое спасибо — я только что написал скрипт, использующий make, который обычно запускает arduino_cli
и просто повторно использует его вывод:
make |grep g++|grep .ino.cpp.o|sed "s/-o .*/-E -dM -o defines.dump/"|sh
удалил один ненужный файл
rm defines.d
и в результате получил defin es.dump
:) Вы можете добавить это к своему ответу для большей наглядности (или я сделаю для этого дополнительный ответ, но в вашем ответе он подойдет лучше), @gilhad
@gilhad: Я добавил это в свой ответ с некоторыми изменениями: я объединил две команды grep
в вызов sed
и удалил опцию компилятора -MMD
, чтобы предотвратить создание файла defines.d., @Edgar Bonet
Отлично, спасибо :) Я просто напечатал это, не долго думая, чтобы попробовать как можно скорее :) (И чтобы все флаги и все было как можно ближе к оригинальной сборке, потому что мои сборки иногда сложнее), @gilhad
- Использование Arduino в качестве автономного компилятора
- Библиотека не найдена при использовании команды arduino-cli (хотя работает с Arduino IDE)
- Как компилировать, загружать и контролировать через командную строку Linux?
- Предупреждение при проверке скетча с кодом VS
- Компиляция идет медленно
- Экран LCD 16*02 I2C показывает только первый напечатанный символ
- Доступ к последовательному монитору в linux cli? Использование arduino-cli?
- Будет ли .ino-скетч ардуино компилироваться непосредственно на GCC-AVR?
@dda: Спасибо за помощь :) Английский — мой третий иностранный язык, и я до сих пор плохо владею им., @gilhad