1371年正月,隨著北元勢力被驅逐出中原,朱元璋開始把注意力轉向西南。
此時的西南,有兩個地方勢力,一是統治四川的明夏政權,二是統治云南的故元梁王政權。
由于云南地遠偏僻,暫時還不在明軍的打擊范圍內,于是朱元璋決定先滅明夏。

當年二月,明軍兵分兩路伐蜀。
其中,擔任主攻任務的南路軍由湯和統領,周德興、廖永忠分任左右副將軍、
負責牽制任務的北路軍由傅友德統領,顧時任副將軍。
從朱元璋的安排便不難看出,這又是他的刻意為之,意在讓湯和立軍功,方便為其進爵。
洪武三年(1370年)六月的功臣授勛儀式上,因軍功不足,湯和未能封公爵,只封了個侯爵。
朱元璋很清楚,以湯和的資歷,封侯爵形同于羞辱。
為了盡快給老哥們進爵,朱元璋決定再幫湯和一把。
但是,湯和這一仗的表現依舊不盡如人意。
他率軍抵達三峽后,磨磨唧唧,錯失好局。
最后奪得頭功的人,是負責牽制的傅友德及湯和的副將廖永忠。
後來回朝受勛領賞的人,也是傅友德和廖永忠。
而湯和回去后,則被老朱劈頭蓋面一頓罵:咱倆什麼關系?我一直想給老哥你封公爵,給老哥你創造機會,但你怎麼總是關鍵時刻掉鏈子呢?唉,我是真替你感到可惜啊。
爾朕舊人,自濠梁相從,軍功不細,宜爵爾為公,緣功過不相掩,封爾為第一侯爵。今又不能自奮,而使他將得上功,朕甚為爾惜之。——《明太祖實錄》
事后,屢屢抓不住機會的湯和自慚形穢,主動退居二線。
而屢立戰功的傅友德則由二線漸漸晉升為一線戰將。

趁著明朝征伐四川,無暇北顧之際,龜縮于漠北的元昭宗和王保保又開始蠢蠢欲動。
沈兒峪之戰后,王保保很清楚明元之間的實力差距。以北元的實力,反攻中原已經不可能了。
不過,元軍奪回明朝控制薄弱的漠南,還是有機會的。
為了奪回失地,王保保在和林豎起王旗,以元昭宗為政治核心,號召各游牧部落團結一致。
受到王保保的影響,一時之間,東起開元(吉林農安),西至甘肅北部的塞外大地上,又冒出了三十多萬元軍。
元昭宗和王保保的小動作,很快被朱元璋知曉。
為了瓦解北元政權,朱元璋派人到漠北對北元將領和牧民進行招降,但招降效果并不好。
當時,漠北的北元諸將對明朝使臣是一種敵視態度,對明朝的招撫不予回應,并以軍事侵擾邊境,伺機南下。
殘元勢力賊心不死,怎麼辦?
對此,明朝的大臣分成了兩派。
以徐達為代表的武將集團主張武力清剿,蕩平漠北。
今下大定,庶民已安,北虜歸附者相繼,惟王保保出沒邊境,今復遁居和林。臣愿鼓率將士,以剿絕之。——《明太祖實錄》
武將們認為王保保狡詐,若是放任其在漠北招兵買馬,必為后患。現在不如趁著軍力強大,出兵討伐,永清大漠,一勞永逸地解決問題。
以劉伯溫和鄭州知州蘇琦為代表的文官主張對北元采取守勢,實施近邊防御戰略。
丁酉,鄭州知州蘇琦言時宜三事。其一,國家肇造區宇,西北余孽未平,關輔、平涼、北平、遼右與夷虜相接,一有警急,調兵轉粟,事難卒辦。請議電田積粟,以示久長之規。其二,宜選股朧重臣,才兼文武,練達邊事,分鎮要害,以統制諸番。若其來歸也,待之以誠,懷之以德;其叛也,喻之以義,示之以威,專明恩信,遠示綏懷,勿啟邊釁,以疑遠人;勿連兵禍,以勞中國。其沙漠非要害之處,當毀其城郭,徙其人戶于內地。——《明太祖實錄》
文官們認為北元仍有很強大的軍力,北伐并不明智。不如以逸待勞,若是王保保敢來,就給他一個教訓。王保保不主動挑釁,就不要搭理他了。
文武大臣們的觀點對立,作為大明董事長的朱元璋又是什麼態度呢?

在史料記載中,當時朱元璋的態度有兩種截然不同的說法。
按照《皇明資治通紀》的記述,朱元璋從一開始就是堅定的主征派,此次北伐其實是由朱元璋提出。
上謂諸將曰:「今天下一家,尚有三事未了。其一,歷代傳國璽在胡未獲。其二,統兵王保保未擒。其三,前元太子不聞音問。今遣汝等分道征之。」——《皇明資治通紀》
但按照《明太祖實錄》的記載,朱元璋起初反對北伐。
他認為明軍是步騎混雜,機動力不如以騎兵為主的元軍,明軍想在戰略縱深極大的漠北找到北元主力決戰,并不容易。但為了顧全大局,朱元璋後來又改變主意,同意了徐達的北伐主張。
彼朔漠一窮寇耳,終當絕滅。但今敗亡之眾,遠處絕漠,以死自衛,困獸猶閗,況窮寇乎?姑置之。——《明太祖實錄》
由于史料記載的不同,我們現在很難知曉朱元璋最初的真實態度。
不過這不重要。因為朱元璋是最高決策者,沒有他的拍板,也不可能有這次北伐。
既然皇帝同意征討,文官們自然也不再多言,接下來就是調兵遣將了。
1372年二月,朱元璋下令征發15萬大軍,兵分三路出擊。
中路軍由征虜大將軍徐達統領,計劃從雁門關北上,進攻和林(外蒙古哈爾和林)。
由于和林位于元朝的嶺北行省,因而這次戰役便被稱為「嶺北之役」。
東路軍由左副將軍李文忠統領,計劃從居庸關北上,中途經應昌靠近和林,配合徐達殲滅元軍主力。
西路軍由征西將軍馮勝統領,計劃沿著河西走廊進攻打甘肅西部,迷惑牽制西北的元軍,使之不能馳援漠北。
朱元璋的總體作戰方針是:以徐達的中路軍為主力,揚言急趨和林,實則緩慢進軍,引誘王保保出戰;李文忠的東路軍在關鍵時刻出其不意,攻其不備,切斷王保保的退路;馮勝的西路軍在完成牽制任務后,向北挺進,與中路和東路大軍會師于和林。
理論而言,朱元璋的作戰方案還是一如既往的靠譜。
如果明軍真的按照計劃打,還真的有可能掃蕩漠北。
但很可惜,三路明軍出征后,卻是各自為戰,沒能按照戰前制訂的策略相互配合。

1372年二月,中路軍率先出擊
二月二十幾日,在大軍進至山西境內,徐達以都督僉事藍玉為先鋒,兵出雁門關。
當時的藍玉,很年輕,極有沖勁。
授命先鋒后,藍玉急速前進,兩戰連勝。
一敗王保保的游騎于野馬川(即克魯倫河,位于今天的中蒙邊境),二敗王保保于土剌河(今外蒙古烏蘭巴托西)。
但是,連戰連勝也讓中路明軍漸漸產生了輕敵心理。
而王保保在兩戰兩敗后,退無可退,遂與元將賀宗哲合兵一處,于嶺北設下埋伏(具體位置未知,大致在和林以南)。

五月六日,被勝利沖昏了頭腦的明軍進入元軍事先設好的伏擊圈。
隨著王保保的一聲令下,數萬元軍從正面沖向明軍。
同一時間,賀宗哲也率部從側翼偷襲明軍。
由于沒有提防,明軍當即大敗,死傷萬余人。
此時,如果徐達的心理素質不強,就像沈兒峪之戰時的王保保那樣,五萬明軍可能就全軍覆滅了。
幸運的是,徐達在極為不利的境況下,沉著冷靜,指揮部隊且戰且退,并修建了堡壘,硬是擋住了王保保的數十次進攻。
見伏擊戰打成了野戰,元軍已無法全殲明軍,王保保只能望天興嘆:看來這輩子是無法報仇雪恥了。
此役,中路明軍的損失有兩種說法。
一是清朝人所著的《明史》,死傷「數萬人」。
二是明朝人所著的《明實錄》,死傷「萬余人」。
不管是哪一種,明軍都是戰敗,徐達也收獲了生平唯一的一次敗績。
在中路軍撤退的時候,西路軍對甘肅的元軍發起進攻。
五月下旬,馮勝以傅友德為先鋒,率五千騎兵沿著河西走廊向西推進。
區區五千人,如果交由三流將領指揮,可能就被元軍吃掉了。
但是,交給傅友德手上,那就不一樣了。
五月下旬,傅友德在判斷當前局勢后,率軍攻打西涼(甘肅武威),擊敗元將失剌罕。
取勝之后,傅友德馬不停蹄,進攻永昌,再次擊敗元軍,殺敵數千,獲輜重牛馬甚眾。
得知傅友德連戰連捷,馮勝趕緊率西路軍主力進至掃林山(甘肅酒泉北),與傅友德會師,第三次擊敗元軍,擒獲北元太尉鎖納兒加,斬敵四千余級。
六月初三,在明軍的強大軍事壓力下,北元將領都驢、伯顏帖木兒等人投降,主動送上馬駝牛羊十余萬頭。
隨后,傅友德乘勝追擊,連克瓜州(甘肅安西)、沙州(甘肅敦煌),屢敗元軍,繳獲馬駝牛羊兩萬頭。
至此,明軍轉戰千余里,席卷了昔日元朝的整個甘肅行省。
到了十月,西路軍獲悉嶺北之役失利的消息,馮勝見策應中路軍的任務已經不可能完成,便下令班師。
從出征到班師,西路軍的發揮只能用超預期來形容。
原本朱元璋只是想讓馮勝牽制西北元軍,讓其不能增援和林。
但不料傅友德七戰七捷,在北元境內如入無人之境,竟然殲滅了西北元軍。
不過,由于殲滅王保保的主力才是朱元璋發動此次北伐的目的。
因而西路軍的超預期發揮,只能算是抹平了中路軍失利帶來的不利影響。與元軍打了個平手,并不能算勝利。

其他兩路大軍未能殲滅王保保,接下來只能看李文忠的表現了。
六月二十九日,李文忠率東路軍抵達口溫(內蒙古查干諾爾南)。
明軍的突然出現,讓當地元軍猝不及防,被迫聞訊而遁,因而明軍取得初戰勝利,繳獲牛馬輜重無數。
元軍敗退,李文忠似乎是受了徐達的傳染,也開始輕敵冒進,他將輜重留在后方,親率大軍輕裝急進,追擊元軍。
在李文忠看來,元軍士氣不振,現在正是大膽追擊,一舉殲滅元軍的大好機遇。
然而,當李文忠追擊到阿魯渾河(外蒙古烏蘭巴托西北)時,迎接他的元軍,卻并沒有逃跑的狼狽和疲態。相反,元軍個個都龍精虎猛、躍躍欲試,像是早就等著明軍到來似得。
從種種跡象表明,李文忠也被元軍伏擊了!

不過,李文忠的勇猛,超出了元軍的預期。
在被元軍伏擊的情況下,他竟能逆風翻盤。
當時,李文忠的坐騎被元軍的飛箭射中。沒有馬騎,李文忠絲毫不慫,他手持短器,以步兵形態與元軍廝殺。
明軍指揮使李榮見主帥有難,便將自己的戰馬交給李文忠。
李文忠重獲戰馬,如同殺神附體,作戰更加勇猛。
明軍將士見主帥如此玩命,瞬間士氣大漲,拼死搏殺,打垮了設伏的元軍,俘敵數萬。
當然,一場惡戰之后,明軍的情況也不樂觀。很多人戰死,受傷的人更多。
此時的東路明軍,已經沒有能力再進一步了。
不過,李文忠卻并不想回去。
他在召集眾將商議后,力排眾議,決定繼續追擊!
隨后,明軍又繼續向北追擊。
對面元軍統帥哈剌章(脫脫長子)見李文忠如此驍勇,自知惹不起,只好命令軍隊后撤。
到了八月,元軍退至阿魯渾河,再次退無可退,再退就要將和林拱手相讓了。
哈剌章無奈,只得以決戰架勢布陣,意欲與李文忠決一死戰。
常言道,狗急還跳墻,兔子急了還咬人。李文忠這次確實過分了,在人家的地盤上一點面子也不留,元軍必然要跟他玩命。
見哈剌章要跟自己拼老命,李文忠馬上收兵固守,做出防御姿態。
李文忠轉攻為守,這回又輪到哈剌章不知所措了。
由于他搞不清李文忠的真實意圖,不敢輕舉妄動。于是明軍和元軍便就此僵持了下來。

不久之后,明軍的糧草行將吃盡。
李文忠見殲滅元軍主力已無可能,遂引軍而去。
在撤退期間,明軍錯過了舊路,加之又缺糧缺水,很多沒死在戰場上的將士,死在了撤退途中。
相比于中路軍,李文忠的東路軍雖然取得了一定戰果,但依舊未能殲滅所遇到元軍。
并且東路軍的損失也不小,戰死了一個侯爵,三個指揮使。至多只能算是得失相當。
到了十一月,朱元璋得知北伐在事實上已經失敗的消息,便下旨班師,中路軍和東路軍相繼撤回關內。
總的來看,洪武五年的北征是一次失敗的軍事行動。
明軍在北元腹地吃了敗仗,不僅沒有達到戰前計劃的肅清北元的戰略目的,而且還損失了大量戰馬。
明軍缺少戰馬,還怎麼遠征?難道讓步兵深入大漠去打騎兵?
那不是打仗,那是送死。
1375年,王保保病死,朱元璋得知消息后,并沒有趁勢進攻。
由此可見,嶺北之戰的失利給明軍帶來的陰影有多深。
可以說,這場戰役讓明軍暫時不可能再發動大規模北伐了。
明朝急需要休養生息,恢復國力。
基于這一現狀,因而大戰之后,朱元璋便采納了文官們的建議,實施經營長城的近邊防御戰略,對北元采取守勢。
但需要注意的是,近戰防御不代表被動挨打,朱元璋從來都沒有放棄過滅掉北元的想法。
從1372年五月開始,朱元璋一面下旨,勸課農桑,恢復中原經濟。
一面訓練軍隊,從各種渠道收集馬匹,為北伐做準備。
1378年,元昭宗病死,其弟脫古思帖木兒即位(也有一說是其子),是為烏薩哈爾汗。
相比于元昭宗,脫古思帖木兒是個不安分的人。
即位之后,他不斷派人南下襲擾明朝,并派人到云南聯合梁王把匝剌瓦爾密,試圖對明朝南北夾擊。
脫古思帖木兒的舉動,讓朱元璋很不爽。明朝也在休養生息八年后,再次發動北伐。

1380年二月,朱元璋命西平侯沐英率陜西之軍進討北元。
沐英領命出擊后,于西北大敗元軍,俘虜北元國公脫火赤、樞密知院愛足,得勝而歸。
次年正月,朱元璋又以徐達為征虜大將軍,湯和為左副將軍,傅友德為右副將軍,率軍北征。
關于此次北征的戰略戰術,朱元璋作了如下指示:首先派偵察部隊出塞,刺探軍事情報,若有埋伏,則誘其深入,待其困疲而反擊之;若無埋伏,即以精兵直搗其營。
四月十五日,徐達率諸將出塞,兵分東西兩路,東路以傅友德為前鋒,西路由沐英率領,兩路大軍分別出擊后,相互策應,擒獲北元平章別里不花、太史文通、知院李宣等人。至八月底,北征部隊班師回京。
同年的九月,為解決腋下之患,朱元璋任命剛剛北征還朝的傅友德為征南將軍,藍玉為左副將軍,沐英為右副將軍,率師30萬,南征云南。
1382年閏二月,明軍攻克大理。梁王把匝剌瓦爾密自盡,大理段氏被擒。
至此,云南全境納入明朝版圖。

明軍南征北討取得的一系列勝利,緩解了明朝的邊防壓力。
但受限于國力,此時的明軍依舊無力發動直搗和林的大規模北伐。
為了減少元軍南下導致的損失,朱元璋想出堅壁清野的辦法,將邊地居民內遷。
邊境上沒人了,我看你蒙古騎兵還能搶到啥?
但是,朱元璋把邊民都內遷以后,很快又發現了新問題。
老百姓內遷了,邊境的土地豈不是拱手送人了?
沒有戰略腹地,長城以內的安全也無法保障了。
于是,在下達內遷令不久后,朱元璋又調整部署,強化了北方邊地的衛所,并讓衛所的兵士在當地屯田,平時種地,有戰事的時候就出戰,寓兵于農、兵農合一。
自此,明朝的北方才算是暫時穩固了下來。

1386年,經過十五年的休養生息,明朝國力得到一定恢復,又具備了大舉北伐的條件。
次年正月,朱元璋任命馮勝為征虜大將軍,傅友德和藍玉為左右副將軍,率師20萬,征討盤踞遼東的北元太尉納哈出。
此役,明軍步步進逼,納哈出被打得退無可退,最后被迫率24萬余人,以及無數羊、馬、驢、駝、輜重向明朝投降。
戰后,朱元璋來不及開慶功宴,很快又做出部署——肅清沙漠,在此一舉。
脫古思帖木兒即位后,離開和林,率部游牧到喀爾喀河、貝爾湖、克魯倫河一帶。
相比于和林,貝爾湖一帶距離遼東的距離較近,具備征討的可能。
朱元璋獲悉了這一情報,決定趁熱打鐵,一舉蕩平北元汗庭!
此時,徐達、鄧愈、李文忠等開國將領皆已病故。
馮勝、傅友德又被調往云南鎮壓蠻夷叛亂。
朱元璋手上無人可用,便決定重用年輕的藍玉。
當年的嶺北之戰,藍玉曾經敗于王保保之手。他做夢都想打敗王保保,以洗刷恥辱。雖然現在王保保已死,但藍玉不會放棄復仇的機會,他要用這次北伐來證明自己的軍事才能,證明自己才是大明最優秀的第二代將領。