I want to test the algorithms in my code without needing to send it to an actual Arduino board. I figured I could lay out my project like:
project/ core.cpp # core algorithms core.h # header for core.cpp project.ino # Arduino setup() loop() calling into core pc-main.cpp # main(argv) calling into core
However, when I do this, the Arduino IDE wants to compile
pc-main.cpp, which won't work since it uses stdio and all that. What can I do instead?
Is there a way to hide a file from the build, other than changing the extension which would inconvenience other editors and compilers? Is there a different standard approach to this kind of problem?
What I've thought of:
I could put
pc-main.cppin another directory and have the build for it refer to the files in the Arduino project directory, but that seems awkward and I'd like a more elegant solution.
I could symlink the
core.*files into the Arduino project directory from elsewhere, but that would also be inelegant, and inconvenience Windows users should one want to compile the project.
I could put an
#ifdefaround the contents of
pc-main.cpp, but I haven't found a suitable
#defineto check for, other than board-specific ones.
I don't want a solution which requires extra steps for each build; the whole point of trying to do this is fast and easy development.
I would also prefer one which does not bring in a whole additional build system, testing framework, or IDE; for example, I found arduino_ci and PlatformIO while researching this question. I'll switch to looking at such options if there isn't a good solution to the problem as I've stated it here.
[My question is arguably the same as Project structure to build for PC and Arduino at a high level, but the question and answer there are broad and about organizing modules and not how to make the build actually work.]