At this point in the game, there are only three Republican candidates who matter. Trump, Cruz, and Rubio.
Trump is a populist shitbag. Before he got involved with the Republican party, he was anti-gun, pro-abortion, actively engaging in corruption and bribery of politicians and abuse of eminent domain, and has overall proved to be an authoritarian jerkass. If you're planning on voting for Trump, stop trying to justify your protest vote. He's not going to make America Great Again. He's not going to restore our gun rights. He's not going to fix immigration. He is, at best, going to do nothing, because that's all that a president can do so long as Congress is against him - assuming that Congress has some balls anyway. At worst, he'll cause an authoritarian nightmare. You're voting for him because he's rude (not "un-PC", there's a difference) on TV and makes the establishment politicians who've screwed you over for years go pee pee in their panties. You're the spite vote.
Rubio is overall meh. He's got a record of crossing party lines that turns off a lot of the people who fall into the "Spite vote" group, but he's not a horrible candidate. And hopefully he's learned from his amnesty blunder. But he needs to drop out of the race. He controls enough delegates to affect the race, but not enough to win. If he dropped out, he'd be handing the race to Cruz for all intents and purposes.
Cruz isn't perfect, but he's good enough. He might be a bit more evangelical than some more libertarian leaning Republicans would prefer, but he's far preferable to Trump, with a record of 2nd Amendment support that is hard to beat, and a record of fighting the Democrats and the party establishment that repeatedly sells out to the Democrats. And unlike Gary Johnson (who is himself, not a perfect candidate), he actually stands a chance of winning should he become the Republican candidate.