Export firmware as a .hex
Current versions of Arduino IDE

Use the menu option in the Arduino IDE:

Sketch ► Export Compiled Binary

See post #6 from the thread How to get hex file from arduino files ?:


  Well, since it was bumped it's worth mentioning there is a new way to
  do this added in Arduino IDE 1.6.5:
  
  
  Sketch > Export Compiled Binary
  If you are doing this with an example then you will be prompted to save the sketch in another location.
  Wait until the sketch has finished compiling.
  Sketch > Show Sketch Folder
  The .hex file will be in the sketch folder
  


Here is a screenshot for OS X:


  


There is no need to fully compile, a simple verify will suffice. From post #10:


  Reopen Arduino, and open a sketch of your choice (use the Examples->Digital->Blink if you have no other sketches). Hit the Verify button to compile the sketch. Now, navigate to the build.path folder. You should see a bunch of files including one with a .hex extension.




Older versions of Arduino IDE

If using an older version of the Arduino IDE, from post #12:


  Try this if using an older version of Arduino 
  
  Taking out HEX file from Arduino in 3 simple steps



Open Arduino IDE
File ► Preferences menu



  
  
  



Find "Show verbose output during " and check the "compilation" box
Locate the preferences.txt file and open it
Add the following line (this is the path to the directory where the hexfile will be stored): 

build.path=C:\Users\&lt;username&gt;\Desktop\hexfile

Change the following line

export.delete_target_folder=true


to 

export.delete_target_folder=false

Quit the Arduino IDE and restart it.
Now when you compile, the directory specified in build.path will contain the .hex file (along with other files which can be ignored)