The Arduino Build Process should use a Makefile

Hello there,

I have several use-cases where I need more control over the build process and the Arduino standard build just doesn't cut it. Then I think: just extend the Makefile and re-run the build. But there is no Makefile. So my suggestion is this:

The Arduino Build Process should use a Makefile

When I first used the Arduino IDE I thought it created and ran a Makefile in the background. I was surprised when I found out that this is not the case. Having a Makefile has a lot of advantages: it makes the build process more transparent. It makes the build process more modular. It makes it easier to edit/customize the build process.

Here's how the suggestion looks like in detail:

  • The Arduino IDE creates a scratch directory and copies the core modules and libraries into that directory
  • The Arduino IDE performs additional preparation steps such as adding #include statements and creating the actual main.c file based on the scratch
  • The Arduino IDE generates a Makefile which builds all of the source files (core, libraries, sketch) and the HEX file. The Makefile should have two targets: "compile" and "program". Those targets are linked to the buttons "verify" and "upload" in the IDE.
  • Finally, the Arduino IDE runs the Makefile

And the best thing is: the user will not notice that you have replaced the underlying build mechanism.

1 Like

Lots more:

https://www.google.com/search?q=arduino+makefile

Here's a feature request for this in the issue tracker:

I'm sure I've seen it in previous feature requests with discussion but this is the only one I found after a short search.

pert:
Here's a feature request for this in the issue tracker:
Switch to CMake to build sketches and rest of the components · Issue #7528 · arduino/Arduino · GitHub
I'm sure I've seen it in previous feature requests with discussion but this is the only one I found after a short search.

Using CMake as a Makefile generator is even better. No need to re-invent the wheel and create yet another Makefile generator. Plus, CMake can create MS Visual Studio projects as well. I hope that gets implemented. Until then I will probably be using Makefiles.

I completely agree. It is a year after the original posting and I am having this same issue. We used the arduino to make a simple temperature control unit, and want to "solidify" the build so we can generate the same hex file from source sometime down the line. Which would mean "freezing" the versions of all the include files and saving the toolchain used for the compile. The dynamic updating of the Arduino IDE and libraries is great for hobby use, but makes it hard to get serious.
I've located makefiles via Google search, but they are for the MacOS or Linux. I'm working on Windows and haven't found a walkthrough for a windows setup. A makefile would make life much simpler.