Portugal, losing their only previous final to Greece in 2004, will fight for the title against the winner of the other match between hosts France and world champions Germany, which will be held in Marseille on Thursday, Xinhua news agency reported.
After a dull first half in which neither side created clear-cut chances, Portugal pulled ahead in the 50th minute through Ronaldo' s stunning header.
The Real Madrid forward jumped high and hung in the air above Wales defender James Chester to bullet a Raphael Guerreiro cross into the roof of the net.
It was his ninth goal in four European Championships and helped him equal Michel Platini's record.
Wales, without suspended Arsenal midfielder Aaron Ramsey, were soon exposed at the back. In just three minutes Fernando Santos' side doubled the lead.
Ronaldo, the first player in history playing in three Euro semifinals, delivered a low drive from 25 meters and Nani stretched to turn the ball home past a wrongfooted Wales keeper Wayne Hennessey.
The 31-year-old almost made it 3-0 in the 63rd minute, but his freekick from 30 meters dipped over the wall and flew over the cross bar.
His performance kept inspiring the whole team until the last moment when he raced onto a long pass and rounded Hennessey, but the angle was tight and his effort hit the sidenet.