由於董卓之亂,引出軍閥混戰,農業生產受到極為嚴重的破壞。曹操感到軍糧是取勝的重要基礎,不少軍閥隊伍,雖一時聲勢浩大,但因缺乏糧草,不戰自潰。要想兼並天下,必須糧足兵壯。他接受了棗祇、韓浩等人的建議,開始實行屯田。曹操下達《置屯田令》,同時進行了一係列組織安排,首先在許縣開始實行屯田。結果屯田的第一年,即得穀百萬石。接著,曹操又把屯田製度逐步推廣到所轄的兗、豫全境,從根本上改善了糧食問題。既安定了民生,又滿足了軍用,為曹操統一大業提供了物質條件。
待曹操把朝中各種事情安排妥當之後,便開始運籌帷幄,準備拉開逐鹿中原的戰爭帷幕。曹操分析了當時的軍事形勢:北麵是冀州袁紹,南邊是袁術,東邊為呂布,西麵是張繡等。在這樣四麵受敵的形勢下,曹操決定利用他們各自的矛盾,把他們分化瓦解,然後再逐一擊破。
首先曹操覺得袁紹此時不僅兵強馬壯,而且又是討董盟主,在當時有些影響,如果與之爭鋒,弄不好會招來圍攻。於是先讓獻帝給其加官晉爵把他穩住,留到後邊對付。淮南和徐州是兵家必爭之地,此時正由袁術和呂布分據。淮、徐兩地曹操不能不得,但時機不到,於是先用計挑撥呂布和袁術的關係,待他們相爭之後,坐收漁人之利。劉備暫立足於徐州,一時對自己還沒有威脅,先封其為鎮東將軍收買之。
曹操決定首先率軍征討張繡。張繡是驃騎將軍張濟的侄子,張濟在進攻穰城死後,張繡投靠了劉表屯軍宛城。曹操十分清楚,劉表之所以招納張繡,不僅是為了壯大自己的力量,而且更主要是讓他來守住荊州的北大門,借以對付曹操。尤其他在謀士賈詡的輔助下,在南陽招兵買馬,勢力日盛,必須及時剿滅。張繡覺得不是曹操的對手,在賈詡的勸導下舉兵投降。曹操因納張繡叔母為妾惹惱了張繡,於是夜襲曹軍。曹操毫無準備,結果受傷退至舞陰。張繡再率騎兵來攻,曹操敗退許都,張繡乘勢占領了舞陰。曹操多次派曹洪領兵攻打,但皆失利,還屯葉縣。建安三年曹操沒有聽從軍師荀彧的勸誡,又率軍進攻穰城。張繡急忙請求劉表援助,結果劉表出兵,屯於安重,切斷了曹軍後路。恰在此時,荀彧告急,說袁紹準備偷襲許都。曹操匆忙率軍回護,他急中生智,用計打敗張繡,返回許都。張繡感到曹操此去,必來報複,於是便想投奔袁紹。賈詡為其分析利害,勸他投靠了曹操。曹操不計舊怨,拜張繡為揚武將軍,又為兒子曹均娶了張繡的女兒,成了親家。
國內戰爭其實隻是不同政治勢力爭奪權力的手段,此時曹操挾天子號令諸侯,很多人便覺得爭之無望,又按捺不住權力的欲望,便想獨立稱帝,另立一家天下。就在曹操第一次征張繡時,袁術便迫不及待地在壽春稱帝。為了培植勢力,他想以聯姻為手段,拉攏呂布以對抗曹操。但由於陳珪的反對,聯姻未成。呂布是一員虎將,曹操想眼下必須穩住他,於是便用獻帝的名義,將呂布封為左將軍,並去信稱讚他製止袁術稱帝,對王室的擁戴,要他同自己共同輔政。呂布得書大喜,立即派陳珪的兒子陳登為特使,到許都謝恩。曹操乘機為陳登父子加官增祿,陳登答應待機為內應滅呂布。袁術對呂布歸服曹操非常憤恨,便派大將張勳分七路殺奔徐州,結果被呂布擊敗,袁術元氣大傷。曹操趁機親統大軍,準備徹底將其擊垮。哪知袁術沒等曹軍到,便棄軍南逃,他的部將橋 等被曹軍打得大敗。從此袁術退縮在淮水以南,一蹶不振。第二年曹操消滅呂布之後,袁術的日子更加難過。於是寫信給哥哥袁紹,願意與袁紹聯手禦敵,並擁立袁紹當皇帝。袁紹接到袁術的信後,馬上派人通知袁術,取道徐州北上到冀州來。曹操聞訊後,立即派劉備和朱靈等率軍截擊。袁術剛到徐州,便遭到阻擊,隻好掉頭南逃,氣急敗壞,從此一病不起,於建安四年死於江亭。不久曹操又將劉備趕出徐州。
經過三年多的艱苦奮戰,曹操收張繡,殺呂布,逼死袁術,逐走劉備,勢力大增,終於具備了與袁紹爭奪霸權的實力。因此,曹操逐鹿中原的最後決戰即將展開。
建安四年,袁紹在河北地區消滅了公孫瓚之後,取得了幽、冀、青、並四州之地。當他聽說袁術北上被曹軍截擊致死的消息後,怒火中燒,他早有與曹操決戰的想法,但沒有抓住機會。此次想一舉殲滅曹操,統一北方後即稱帝。他親自精選10萬兵卒,戰馬萬匹,準備進攻許都。他的謀士沮授勸他,眼下爭戰不休,兵困馬乏,不可輕易出兵,用以逸待勞之計可敗曹軍。但也有些匹勇之夫,好大喜功,鼓動袁紹:“以明公之英武,統河北之強眾,去討伐曹操,易如反掌,何必那麼費事。”經過一番爭論之後,袁紹終於親率大軍,直接殺奔許都。
袁紹將率軍攻打許都,曹軍的一些將領深感恐懼。曹操對眾將說:“我深知袁紹的為人,誌大而智少,外表上很凶,內心很膽小。疑心重,很缺少威嚴,兵多而指揮不力,將驕而政令不一。土地雖廣,糧食雖豐,正好取來作為我的軍糧。”曹操的確深知袁紹,這番話說得十分透徹,諸將打消了顧慮,積極準備抗擊袁紹大軍。
袁紹大軍進入黎陽後,即派顏良過黃河攻打駐守白馬的東郡太守劉延。劉延告急,曹操一時抽不出兵馬營救。四月,曹操采納了荀彧聲東擊西的戰術,從官渡率軍北上,佯作攻打袁紹後方。袁紹上當,便分出一部分軍隊調往延津,曹操立即率領輕騎直奔白馬,攻其不備,殺了大將顏良。曹操遂解白馬之圍,然後將軍民全部遷出。袁紹聞訊,急忙下令渡河追擊曹軍。曹操見袁軍越來越多,便下令騎兵解鞍放馬,讓馬匹亂跑,以誘敵深入。大將文醜和劉備率五六千騎兵趕到,看見曹軍輜重丟得滿地,便搶作一團。曹操見時機已到,令600騎兵上馬奮擊,袁軍被打得措手不及,混戰中文醜被殺。