Как узнать все #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, используйте это, иначе выдайте ошибку/предупреждение для пользователя, что контакты должны быть быть назначен.

И многие другие...

, 👍2

Обсуждение

@dda: Спасибо за помощь :) Английский — мой третий иностранный язык, и я до сих пор плохо владею им., @gilhad


1 ответ


Лучший ответ:

3

Я не знаком с 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