How to find out all #define
used by arduino-cli
in compile?
I had seen something some time ago, but I cannot find it again. I think that it was some option somewhere, and the result was that the compile did not end normally, but some generated file contained lots of useful and lots of obscure defined names.
I would like to find everything that's defined in my program, which I want to write, compile, and then run on different Arduinos, but it sometimes need different Serial to be used, different pin assignments, different internal buffer sizes and so on.
And I would like to organize the differences better, than just put all and everything to one big #ifdef
- #endif
for each extra platform.
Something like:
- if it does not have
Serial
butSerial1
,#define Serial Serial1
- if it has 2kB RAM or less, set MY_BUF_SIZE to 10; if it has less than 3kB use 30, else use 100.
- but if it is
Micro Pro
, use this pin assignment, else if it isNano Every
use that, else issue error/warning for user, that pins need to be assigned.
And many others...
-
1@dda: Thank for your help :) English is my third foreing language and I am still not good at it.gilhad– gilhad2023年11月14日 20:24:43 +00:00Commented Nov 14, 2023 at 20:24
1 Answer 1
I am not familiar with arduino-cli. If you can manage to find the g++
command line it uses for compiling your sketch, then you can get the
list you are looking for by using a modified version of that command:
- add the options
-E -dM
- find the option
-o output_file
and change the name of the output file to something more appropriate.
Edit: Following a suggestion by @gilhad, you can build the required
command line by piping the output of arduino-cli through sed
:
arduino-cli compile | \
sed -n '/g++.*\.ino\.cpp\.o/{s/-MMD//;s/-o .*/-E -dM -o defines.dump/;p}'
-
Thank you very much - I just made script, that use the make, which normally runs
arduino_cli
and simply reuse its output:make |grep g++|grep .ino.cpp.o|sed "s/-o .*/-E -dM -o defines.dump/"|sh
removed one unneeded filerm defines.d
and gotdefines.dump
as result :) You can add this to your answer for better visibility (or I vill make extra answer for that, but in your answer it would fit better)gilhad– gilhad2023年11月13日 22:25:57 +00:00Commented Nov 13, 2023 at 22:25 -
@gilhad: I added this to my answer, with a some modifications: I merged the two
grep
command into thesed
call, and removed the compiler option-MMD
in order to prevent the generation of defines.d.Edgar Bonet– Edgar Bonet2023年11月14日 12:55:57 +00:00Commented Nov 14, 2023 at 12:55 -
Nice, thank you :) I just typed that without thinking much, to try it as soon as possible :) (And to have all the flags and all as near as possible to original build, because my builds are sometimes more complicated)gilhad– gilhad2023年11月14日 19:55:40 +00:00Commented Nov 14, 2023 at 19:55