Graham was a free agent after being released by Middlesbrough in the summer, and the Cumbrians beat Championship clubs to his signing by offering a large financial package.
He scored seven times in 11 appearances for Carlisle on loan last season.
"He sees this as a step up because he is going to be playing first-team football," Carlisle boss Neil McDonald told the News & Star.
"He is getting his career right on track. He gets on really well with the lads, we have treated him right and looked after him."