McCormack started his career with Scottish Premier League club Rangers in 2002, where he made few appearances and was loaned to English League One side Doncaster Rovers in January 2006. At the end of the season he was released by Rangers and joined fellow SPL side Motherwell. Although his first season was disrupted by a long illness, he became a regular player and scorer in his second season there. In 2008 McCormack joined Championship club Cardiff City upon the expiry of his contract.

McCormack played ten times for Scotland U21s, scoring three goals, and he was also capped once for the Scotland B team. He made his full international debut for Scotland in 2008 and has been capped 13 times overall, scoring twice.

At the start of the 2006–07 season, McCormack was told he did not feature in new Rangers manager Paul Le Guen's plans and was released. On 11 July 2006, he signed a two-year deal at Motherwell. His new manager Maurice Malpas, who had worked with him at Scotland under-21, said that he had seen him improve by playing regularly at Doncaster.[9][10]

McCormack made his Well debut on 30 July as the team began the SPL season with a 2–1 home loss to Rangers, in which he assisted their goal by Phil O'Donnell.[11] His first season at Fir Park was disrupted by illness that caused an overactive thyroid gland and ruled him out from September until February 2007.[12] On 28 February, he scored his first goal for the team, a consolation in a 2–1 home loss to First Division team St Johnstone in the quarter-finals of the Scottish Cup.[13] His only league goals of the campaign came on 12 May, one in each half of a 3–2 home loss to St Mirren.[14]

In 2007–08, McCormack became a fixture in the Motherwell first team, where he found himself better suited to playing in a 4–3–3 formation, receiving the October 2007 Young Player of the Month award.[15] The season also saw an improvement in his goal tally as he scored a total of 11 goals, although he reached this mark on 16 February with a brace against Gretna and suffered a goal drought in the remaining 14 games of the season.[16]

In January 2008, McCormack was linked with a move to Premier League sides Wigan Athletic, even coming as close as having a contract ready to be signed with the club,[17] and Middlesbrough but no deal was agreed and he eventually signed for Championship side Cardiff City on 28 June on a free transfer, although the clubs would later agree on a compensation fee of £120,000.[18] On his arrival, McCormack stated that one of the biggest reasons that persuaded him to sign for the club, alongside the chance to play first-team football and the group of Scottish players on the club's books, was the presence of his idol Robbie Fowler, only for the former England international to leave the club soon after.[19]

McCormack made his league debut on the opening day of the season in a 2–1 victory over Southampton and went on to score his first competitive goal for Cardiff in a 1–1 draw against Doncaster the following week. He finished the season as the club's top scorer with 23 goals in all competitions and joint second place Championship top scorer. His final goals of the season in a 3–1 win over Burnley were the last goals scored at Ninian Park by a Cardiff player in a competitive match.

On 23 July 2009 it was reported McCormack handed in a transfer request. This was denied by his agent who claimed that there is a 'gentleman's agreement' in his contract that stipulates that he can speak to any Premier League club who bid for his services.[20] Amidst interest from Premier League clubs, on 8 August he was involved in three goals of a 4–0 win over Scunthorpe United in the first match at the Cardiff City Stadium.[21]

On 24 August 2010, Cardiff agreed a fee with Leeds United over a possible transfer,[22] and three days later he signed a three-year contract for an undisclosed fee.[23] He made his Leeds debut on 28 August as a 70th-minute substitute in a 1–0 win over Watford,[24] and his first start in a 0–0 draw with Doncaster Rovers on 17 September.[25] On 30 April 2011, he scored his first goal for Leeds in a 1–0 win over Burnley, and was named man of the match.[26] His only other goal of the campaign was in Leeds' 2–1 win over champions Queens Park Rangers in the final game of the season.[27]

With two goals in a 3–3 draw against Brighton & Hove Albion on 23 September 2011, including an injury-time equaliser,[28] McCormack became the first Leeds player in over 50 years to score in six consecutive league games.[29] He was nominated for the Championship Player of the Month Award for September, which went to Middlesbrough's Matthew Bates.[30] He was linked with a move to Wolves during November, but manager Simon Grayson stated that he did not want to sell McCormack.[31]

During December, he was linked with moves to Premier League clubs Blackburn Rovers and Wolves again.[32][33] In April 2012, Leeds were in negotiations with McCormack over extending his current deal.[34] He finished the season as the club's top scorer. On 28 April, after he scored 19 goals in all competitions for Leeds during the 2011–12 season won the Yorkshire Evening Post Player of the Year Award for Leeds United.[35]

On 17 August 2012, he signed a new three-year deal with the club.[36] In the first few minutes of the match against his former club Cardiff City, McCormack was tackled by Jordon Mutch and picked up a serious ankle injury as a result of the tackle.[37] He underwent surgery on the damaged ankle and was expected to be out until the new year, but returned to action on 18 November.[38] McCormack scored the winning goal for Leeds in a 2–1 FA Cup victory against Tottenham Hotspur on 27 January 2013.[39] At the club's end-of-season awards, this won the club's Goal of the Season award.[40]

On 3 August, Leeds confirmed they had rejected a joint bid from Blackpool for McCormack and Aidy White.[41] Later in the month he entered negotiations for a new contract,[42] ending the uncertainty about the player's future after three separate bids by Middlesbrough in the region of £1.8 million.[43] On 30 August, after Leeds had rejected those bids, McCormack signed a new four-year deal with the club.[44] McCormack became the first Leeds player to score four times in a league match since Brian Deane in 2004, and the first to do so in an away match for 87 years, in a 4–2 victory over Charlton Athletic on 9 November 2013 which put him to the top of the Championship leading scorers of the 2013–14 season with 11 goals.[45]

On 16 January 2014, McCormack was named club captain after Rodolph Austin stepped down from the role.[46] In January 2014, Leeds rejected bids for McCormack from West Ham United and then on transfer deadline day from Cardiff. With rumours of interest also from Sunderland on deadline day, McCormack released a statement via Sky Sports News that he pledged his future to Leeds and also his support of manager Brian McDermott, who was sacked only 30 minutes later.[47] The next day, McCormack scored a hat-trick in a 5–1 victory against local rivals Huddersfield Town, taking his tally to 22 goals for the season.[48]

McCormack finished the 2013–14 season scoring 29 goals in all competitions for Leeds, and was second to Danny Ings as Championship Player of the Year.[49] He was named in the Championship PFA Team of the Year,[50] and also named the Ludo Player of the Year and the LUSC Player of the Year,[51] as well as the Yorkshire Evening Post Player of the Year.[52] At the club's annual awards ceremony, McCormack won the Fans Player of the Year award, Players Player of the Year award and also the Goal of the Season Award for his strike against Sheffield Wednesday.[53] On 5 June, Leeds owner Massimo Cellino said he had rejected a substantial offer for McCormack from Newcastle United,[54] which that club denied.[55] On 30 June, McCormack was left out of Leeds' pre-season training camp in Italy.[56] On 2 July, BBC Sport reported that McCormack had handed in a transfer request.[57] Leeds commented on his future the following day, reiterating that they wanted the player to remain at the club and that the club 'no longer needs to sell their best players in order to run the club successfully'.[58]

McCormack signed for newly relegated Championship team Fulham on 8 July 2014.[59] He was transferred for an £11 million fee, including add-ons, and signed a four-year contract with the option of a fifth.[59][60]

He made his debut on 9 August as Fulham began the season with a 2–1 loss at Ipswich, after which manager Felix Magath criticised his fitness level.[61] Fifteen days later he scored his first goal for his new team, the only one in a League Cup second round victory at West London rivals Brentford.[62] On 17 September, he opened his league account for the Whites with a brace in a 5–3 loss at Nottingham Forest.[63] McCormack was sent off for two yellow cards in a 3–3 draw at Wigan Athletic on 1 November.[64]

On 21 January 2015, McCormack scored a hat-trick in the first 32 minutes of a 3–2 win over Forest at Craven Cottage.[65] At the start of April, he scored in four consecutive games,[66] and on the 25th he scored another treble in a 4–3 home win over Middlesbrough.[67] He received the majority of the fans' votes for Fulham's Player of the Season.[68]

McCormack retained the club's award the following season, with nearly three-quarters of the votes cast, and was also included in the Championship PFA Team of the Year[69] and beaten only by top scorer Andre Gray as the league's Player of the Season.[70] He scored 23 times over the season in addition to nine assists.[70]

On 21 January 2017, Villa manager Steve Bruce revealed that McCormack had been dropped from the first team squad for "continually missing training", adding that "he is nowhere near fit enough to play and be involved".[75] Twelve days later, he joined fellow Championship team Nottingham Forest on loan until the end of the season.[76] After making the loan move, McCormack admitted that he had once missed training when he had been trapped in his home by a faulty electronic gate.[77] He scored on his debut for Forest in a 5–1 loss at Norwich City on 11 February.[78] McCormack made himself unavailable for "personal issues" in March, as Forest struggled against relegation.[79]

McCormack made only two EFL Cup substitute appearances in the early part of the 2017–18 season after returning to Villa.[80] On 29 September 2017, he signed for A-League club Melbourne City on loan until January 2018.[81] He made his debut in the season opener on 6 October, starting as his team defeated Brisbane Roar 2–0 at the Melbourne Rectangular Stadium.[82] Fifteen days later, he scored his first goal, a free kick to win a home game against the Wellington Phoenix.[83] On 28 October, he scored both goals of a 2–0 win at Adelaide United. After the game, he told the media that he was pleased to be in scoring form again.[84] On 22 November, it was reported that McCormack had been dropped from the Melbourne City squad for being "exceptionally late to training".[85]

After returning to Villa, McCormack was still frozen out of the team due to his disputes with Bruce. In May 2018, it was revealed that his annual salary of £2.3 million would have a bonus £1 million added if Villa were promoted, despite him not playing a league match for them that season.[86]

On 20 September 2018, McCormack signed a one-year loan deal with A-League club Central Coast Mariners FC.[87] He played alongside the Olympic sprinting champion Usain Bolt for Central Coast, and assisted Bolt's first goal in an official football match.[88] On 5 January 2019, McCormack was recalled by Aston Villa;[89][90] he made just five appearances for the Mariners, scoring once.[91]

McCormack was then loaned to Motherwell for the rest of the 2018–19 season, returning to the club after a decade elsewhere.[92]

McCormack made his debut for the Scotland U21 in 2006. He scored his first goal for the side on 11 October 2007 against Lithuania and scored again in his next appearance, a 4–0 victory over Slovenia U21s. McCormack won 10 caps for the under-21 side.

He made his debut for the senior side on 30 May 2008 when he came on as a substitute during the 3–1 defeat of Czech Republic.[93] McCormack was called up again in March 2009 for the 2010 FIFA World Cup qualifiers against Netherlands and Iceland. He started both matches, scoring his first goal for Scotland in a 2–1 win over Iceland on 1 April 2009.[94]

Scotland manager Craig Levein received several complaints for not including the in-form McCormack in his Scotland squad in their final two European Championship qualifiers.[95] McCormack received a call up to the Scotland squad in August 2012, and scored his second international goal in a 3–1 win over Australia.[96]

McCormack received a call-up to Gordon Strachan's first Scotland squad for the friendly against Estonia in February 2013 but pulled out of the squad after suffering an illness.[97] On 24 August, after scoring 4 goals in his first 5 games for Leeds during the 2013–14 season, McCormack's form earned him a recall to Gordon Strachan's Scotland squad for World Cup qualifiers against Belgium and Macedonia.[98]

On 27 October 2009, McCormack was arrested in Cardiff Bay on a drink-driving charge after crashing his Range Rover into metal railings in the early hours of the morning.[99] On 23 November, he pleaded guilty to the charge and was banned from driving for 17 months and fined £15,500.[100]

In July 2013 McCormack was handed a £200 fine, ordered to pay £883.25 in costs and a £20 victim surcharge at a hearing at Leeds Magistrates' Court, for the offense of flytipping.[101]

McCormack married model Courtney St John in Marbella in June 2016.[102] They have two sons together,[102] while McCormack has an older son from another relationship.[103]