My current favorite tool for developing non-trivial Arduino projects is Netbeans with C++ support. This documents my setup.
I use Arduino-Makefile to do the actual building and NB for coding support. I won't cover using Arduino-Makefile here as that's its own thing. So assuming you have Arduino-Makefile working on the command line, the next thing you'll want to do is set up a new tool collection in Netbeans for Arduino along the lines of the figure below:
When creating a new project, use a Makefile that looks something like the following:
# Project config ARDUINO_LIBS = SoftwareWire AsyncTimer BOARD_TAG = pro BOARD_SUB = 16MHzatmega328 MONITOR_PORT = /dev/ttyUSB0 MONITOR_CMD = screen-wrap # "Platform" config ARDUINO_QUIET = true ARDUINO_SKETCHBOOK = $(HOME)/Arduino ARDUINO_DIR = $(HOME)/opt/arduino ARDMK_DIR = $(HOME)/Build/Arduino-Makefile # Include parent Makefile from <https://github.com/sudar/Arduino-Makefile> include $(HOME)/Build/Arduino-Makefile/Arduino.mk
While your setup should be working now, NB will be shouting at you a lot about things not being defined, etc. That's because you need to add code completion directories to the tool collection. Do this on the Code Completion > C++ tab of the tool collection dialog.