From light to heavy smoke smell:
1) Febreze works suprisingly well, the mini-bottle you can buy from Autozone did the trick for me
2) A more odor focused cleaner like Meguiars G2316
Amazon.com: Meguiar's G2316 Odor Eliminator - 16 oz.: Automotive
3) An odor bomb
4) A commercial Ozone machine. We use these for rental properties to get smoke smell out. Smaller units work for cars too
I'll second Febreeze. I had a 5 gallon gas can fall over in the trunk of my 4Runner and spill about a quart of fuel. Threw away the cargo mat, steam cleaned, scrubbed, spent 2 days at the detail shop with an Ozonator, and still after about a week the smell came back. As a last ditch effort before I dumped the truck at Carmax I sprayed a bottle of Febreeze all over the carpet several times over the course of a day, and it completely eliminated the smell.
Granted smoke smell gets into the vents and what not, but I'm sure if there's any lingering smell weeks or months from now you'll be able to eliminate it with a little effort.