How can I have code in a project that won't compile for Arduino?
up vote
5
down vote
favorite
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.cpp
in 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
#ifdef
around the contents ofpc-main.cpp
, but I haven't found a suitable#define
to 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.]
arduino-ide compile build
New contributor
add a comment |
up vote
5
down vote
favorite
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.cpp
in 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
#ifdef
around the contents ofpc-main.cpp
, but I haven't found a suitable#define
to 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.]
arduino-ide compile build
New contributor
add a comment |
up vote
5
down vote
favorite
up vote
5
down vote
favorite
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.cpp
in 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
#ifdef
around the contents ofpc-main.cpp
, but I haven't found a suitable#define
to 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.]
arduino-ide compile build
New contributor
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.cpp
in 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
#ifdef
around the contents ofpc-main.cpp
, but I haven't found a suitable#define
to 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.]
arduino-ide compile build
arduino-ide compile build
New contributor
New contributor
New contributor
asked Nov 14 at 16:32
Kevin Reid
1284
1284
New contributor
New contributor
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
9
down vote
accepted
I would use conditional compilation, like this:
#ifndef(ARDUINO)
// Non-Arduino code.
#endif
Thanks. Is there official documentation that specifies this#define
exists?
– Kevin Reid
Nov 14 at 17:10
You can add the #define to your code and manually change it when you change environments. You can look up Arduino compiler predefined symbols. Or you can tweak the IDE's compiler command to include "-DSYMBOL_OF_MY_CHOICE" which would define your symbol during an IDE compile and presumably be undefined in your desktop environment.
– JRobert
Nov 14 at 17:46
To be clear, I found thatARDUINO
is already defined and I didn't need to configure anything, so Edgar's code works exactly as written. I'm asking if there's documentation for it, as I think the answer would be even better with a link.
– Kevin Reid
Nov 14 at 18:01
@KevinReid: I didn't find it in a doc (although it's mentioned here), but in a Makefile intended to emulate the Arduino IDE.
– Edgar Bonet
Nov 14 at 19:58
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
9
down vote
accepted
I would use conditional compilation, like this:
#ifndef(ARDUINO)
// Non-Arduino code.
#endif
Thanks. Is there official documentation that specifies this#define
exists?
– Kevin Reid
Nov 14 at 17:10
You can add the #define to your code and manually change it when you change environments. You can look up Arduino compiler predefined symbols. Or you can tweak the IDE's compiler command to include "-DSYMBOL_OF_MY_CHOICE" which would define your symbol during an IDE compile and presumably be undefined in your desktop environment.
– JRobert
Nov 14 at 17:46
To be clear, I found thatARDUINO
is already defined and I didn't need to configure anything, so Edgar's code works exactly as written. I'm asking if there's documentation for it, as I think the answer would be even better with a link.
– Kevin Reid
Nov 14 at 18:01
@KevinReid: I didn't find it in a doc (although it's mentioned here), but in a Makefile intended to emulate the Arduino IDE.
– Edgar Bonet
Nov 14 at 19:58
add a comment |
up vote
9
down vote
accepted
I would use conditional compilation, like this:
#ifndef(ARDUINO)
// Non-Arduino code.
#endif
Thanks. Is there official documentation that specifies this#define
exists?
– Kevin Reid
Nov 14 at 17:10
You can add the #define to your code and manually change it when you change environments. You can look up Arduino compiler predefined symbols. Or you can tweak the IDE's compiler command to include "-DSYMBOL_OF_MY_CHOICE" which would define your symbol during an IDE compile and presumably be undefined in your desktop environment.
– JRobert
Nov 14 at 17:46
To be clear, I found thatARDUINO
is already defined and I didn't need to configure anything, so Edgar's code works exactly as written. I'm asking if there's documentation for it, as I think the answer would be even better with a link.
– Kevin Reid
Nov 14 at 18:01
@KevinReid: I didn't find it in a doc (although it's mentioned here), but in a Makefile intended to emulate the Arduino IDE.
– Edgar Bonet
Nov 14 at 19:58
add a comment |
up vote
9
down vote
accepted
up vote
9
down vote
accepted
I would use conditional compilation, like this:
#ifndef(ARDUINO)
// Non-Arduino code.
#endif
I would use conditional compilation, like this:
#ifndef(ARDUINO)
// Non-Arduino code.
#endif
answered Nov 14 at 16:36
Edgar Bonet
23.1k22344
23.1k22344
Thanks. Is there official documentation that specifies this#define
exists?
– Kevin Reid
Nov 14 at 17:10
You can add the #define to your code and manually change it when you change environments. You can look up Arduino compiler predefined symbols. Or you can tweak the IDE's compiler command to include "-DSYMBOL_OF_MY_CHOICE" which would define your symbol during an IDE compile and presumably be undefined in your desktop environment.
– JRobert
Nov 14 at 17:46
To be clear, I found thatARDUINO
is already defined and I didn't need to configure anything, so Edgar's code works exactly as written. I'm asking if there's documentation for it, as I think the answer would be even better with a link.
– Kevin Reid
Nov 14 at 18:01
@KevinReid: I didn't find it in a doc (although it's mentioned here), but in a Makefile intended to emulate the Arduino IDE.
– Edgar Bonet
Nov 14 at 19:58
add a comment |
Thanks. Is there official documentation that specifies this#define
exists?
– Kevin Reid
Nov 14 at 17:10
You can add the #define to your code and manually change it when you change environments. You can look up Arduino compiler predefined symbols. Or you can tweak the IDE's compiler command to include "-DSYMBOL_OF_MY_CHOICE" which would define your symbol during an IDE compile and presumably be undefined in your desktop environment.
– JRobert
Nov 14 at 17:46
To be clear, I found thatARDUINO
is already defined and I didn't need to configure anything, so Edgar's code works exactly as written. I'm asking if there's documentation for it, as I think the answer would be even better with a link.
– Kevin Reid
Nov 14 at 18:01
@KevinReid: I didn't find it in a doc (although it's mentioned here), but in a Makefile intended to emulate the Arduino IDE.
– Edgar Bonet
Nov 14 at 19:58
Thanks. Is there official documentation that specifies this
#define
exists?– Kevin Reid
Nov 14 at 17:10
Thanks. Is there official documentation that specifies this
#define
exists?– Kevin Reid
Nov 14 at 17:10
You can add the #define to your code and manually change it when you change environments. You can look up Arduino compiler predefined symbols. Or you can tweak the IDE's compiler command to include "-DSYMBOL_OF_MY_CHOICE" which would define your symbol during an IDE compile and presumably be undefined in your desktop environment.
– JRobert
Nov 14 at 17:46
You can add the #define to your code and manually change it when you change environments. You can look up Arduino compiler predefined symbols. Or you can tweak the IDE's compiler command to include "-DSYMBOL_OF_MY_CHOICE" which would define your symbol during an IDE compile and presumably be undefined in your desktop environment.
– JRobert
Nov 14 at 17:46
To be clear, I found that
ARDUINO
is already defined and I didn't need to configure anything, so Edgar's code works exactly as written. I'm asking if there's documentation for it, as I think the answer would be even better with a link.– Kevin Reid
Nov 14 at 18:01
To be clear, I found that
ARDUINO
is already defined and I didn't need to configure anything, so Edgar's code works exactly as written. I'm asking if there's documentation for it, as I think the answer would be even better with a link.– Kevin Reid
Nov 14 at 18:01
@KevinReid: I didn't find it in a doc (although it's mentioned here), but in a Makefile intended to emulate the Arduino IDE.
– Edgar Bonet
Nov 14 at 19:58
@KevinReid: I didn't find it in a doc (although it's mentioned here), but in a Makefile intended to emulate the Arduino IDE.
– Edgar Bonet
Nov 14 at 19:58
add a comment |
Kevin Reid is a new contributor. Be nice, and check out our Code of Conduct.
Kevin Reid is a new contributor. Be nice, and check out our Code of Conduct.
Kevin Reid is a new contributor. Be nice, and check out our Code of Conduct.
Kevin Reid is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2farduino.stackexchange.com%2fquestions%2f57822%2fhow-can-i-have-code-in-a-project-that-wont-compile-for-arduino%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown