Eclipse makes this rather confusing, since there are multiple places to set this, and the settings are coupled, but here's how it works:
Note: if you've followed my instructions below, or the other answers here, and it still won't work, check out my more-extensive troubleshooting section on my website here.
To set custom macros for a given project (affects both building and indexing in Eclipse)
Here's my preferred way to do it.
In this example we will set the following defines at the Eclipse project level (for its indexer and builder) rather than in your source code.
#define ARDUINO 1000
#define AVR
#define __AVR_ATmega328__
If you were defining them at the command-line when manually building a gcc
or g++
project, the above #define
s would look like this (search for -Dmacro
in the man gcc
pages for details):
-DARDUINO=1000 -DAVR -D__AVR_ATmega328__
So, do the following in your Eclipse project. My project here is called "Arduino 1.8.13" (see full screenshot of this a couple images below):
Right-click on your project in the "Project Explorer" pane on the left --> Properties --> C/C++ General --> Paths and Symbols --> Symbols tab --> select either GNU C or GNU C++ --> click the Add button at the top-right --> type ARDUINO
for name and 1000
for value --> BE SURE TO CHECK THE 2 BOXES FOR Add to all configurations and Add to all languages (unless you don't want those behaviors) --> click OK.
Repeat this step for all defines, as follows. Be sure to check the boxes for Add to all configurations and Add to all languages (unless you don't want those behaviors) for each one:
- Name:
ARDUINO
, Value: 1000
- Name:
AVR
, Value: (leave empty)
- Name:
__AVR_ATmega328__
, Value: (leave empty)
Here's a screenshot showing the first one. Notice all the highlighted sections to click or pay attention to:
Once you've done this for all macros you wish to define (ex: the 3 above), you will see the following:
- If you checked the box for Add to all languages for each one, then these macros will have been applied to BOTH the GNU C and GNU C++ languages. So, click on one and then the other and you should see the macros in both places, like this:
- If you checked the box for Add to all configurations for each one, then these macros will have also been applied to all build "Configurations", such as Debug and Release, as shown here:
- Keep in mind all of the various combinations of "Languages" and "Configuration" are unique. You can set macros for one or both languages for each configuration individually if you don't check the 2 boxes for Add to all configurations and Add to all languages when adding the macros.
- If you navigate to Project Properties --> C/C++ Build --> Settings --> Tool Settings tab --> Cross GCC Compiler --> Preprocessor you will also see these macros now defined for all "GCC" C files, when building or indexing!:
Note that you can also edit, add, or delete macros specific to a given "Configuration" or "Language" (this particular place is for the GNU C language) right here, rather than as previously done above, if you like. BUT, the only way to apply a given macro to ALL languages and ALL build configurations at once is doing it how I showed you above.
- You can also see these macros are applied to the GNU C++ build and index settings if you navigate to Project Properties --> C/C++ Build --> Settings --> Tool Settings tab --> Cross G++ Compiler --> Preprocessor:
Again, to customize macros just for C++ and just for this selected "Configuration" you could edit them right here.
When done adding all macros, click Apply or Apply and Close. When asked, choose YES to re-index the entire project:
If you didn't click YES, you may manually trigger the project to be reindexed by right-clicking on it in the Project Explorer and going to --> Index --> Rebuild.
Troubleshooting
Update: see also my more-extensive troubleshooting section on my website here.
If your settings/macros don't seem to be getting applied, and your code still shows sections blacked-out, indicating the macros for those sections are false or undefined, you may need to do or check the following:
- Try reindexing your project by right-clicking on it in the Project Explorer and going to --> Index --> Rebuild.
- You may not have set the macros for the right build configuration or language. You will need to check all of the various build configurations and languages as I showed in the various screenshots above.
- Follow the instructions above and re-add the macros, this time BEING SURE TO CHECK THE 2 BOXES FOR Add to all configurations and Add to all languages.
- OR, manually navigate to the Project Properties --> C/C++ Build --> Settings --> Tool Settings tab -->
- --> Cross GCC Compiler --> Preprocessor OR
- --> Cross G++ Compiler --> Preprocessor...
- ...sections to manually configure the macros just for one language and/or configuration, or another. ALL of these settings must be either in-sync or set individually.
- The easiest place to set these settings, as already stated above, is here: Right-click on your project in the "Project Explorer" pane on the left --> Properties --> C/C++ General --> Paths and Symbols --> Symbols tab. BUT, if you forgot to check the boxes for Add to all configurations and Add to all languages, I recommend just deleting the macros and then adding them again, this time checking those boxes.
- If you don't want to worry about which build Configuration you have selected, and you didn't check the Add to all configurations box when you added the macros, you can also change this global workspace setting, but I don't really recommend it:
Window --> Preferences --> C/C++ --> Indexer --> select Use active build configuration. Again, however, I do NOT use this option myself and do not necessarily recommend you use it either. It's just something to be aware of is all.
See also
- This answer is also posted on my website here: https://gabrielstaples.com/eclipse-defining-custom-macros-for-indexer/
- My full Eclipse setup document here: https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/tree/master/eclipse