The second way is more time consuming if you use these tools directly. Often the two steps are coupled. The first step is used to define chunks of genome that will be send to the second step tools (e.g. within Maker and Ensembl annotation pipelines).
I would use blat or exonerate. Blat is better for more closely related species and the nice thing is that both will produce a blast table for easy parsing (though, with exonerate you have to use the 'roll-your-own' with a custom string, which I could share). Exonerate is used by Maker for protein alignments and it has a lot more options that allow you to control the splicing and intron modeling, codon alignment, etc. Blat is a lot faster, so that is a trade-off to consider.
If you wish to align those proteins to a reference assembly you could use the exonerate (http://www.ebi.ac.uk/~guy/exonerate/) protein2genome model which models introns. I used this when I wanted to align proteins from the TAIR10 database to our reference genome. You would also probably want to split the file into considerably smaller chunks so that many faster individual alignments can be carried out before the results are merged - this way the alignment as a whole will be much quicker.