洪武五年(1372年),明太祖朱元璋派遣徐达、李文忠和冯胜分别率领5万明军,从三条战线进攻北元,目标是击垮北元的主要据点和林(今乌兰巴托一带)。由于和林曾是元朝的岭北行省,并且战场集中在岭北行省的领土上,这场战斗因此被称为岭北之战。朱元璋原本预计,三路明军势如破竹,能够迅速消灭北元残余的抵抗力量,完成对大漠的战略控制。然而,北元的顶级将领王保保,在和林发动了绝地反击,成功击败了徐达,给明军带来了历史上最大的失败。这一战迫使明军撤退,李文忠所部也未能发挥大的作用,只有冯胜部在傅友德的杰出指挥下,取得了河西七战七捷,算是为明军争回了一些面子。
岭北之战的失败,让朱元璋不得不重新评估北元的实力。明军在此次战斗中付出了惨重的代价,尤其是战马的损失严重。对于在蒙古草原上作战的明军来说,战马是最为重要的战略资源,但明军本就缺乏足够的战马,岭北之战几乎消耗了所有的战马。傅友德虽然在战斗中表现出色,但由于战马短缺,他无法进一步扩大胜果。尽管朱元璋仍有意继续进攻,但在缺乏足够兵力和资源的情况下,最终不得不放弃。另一方面,尽管北元在岭北之战中侥幸取胜,但其军力逐渐衰退,尤其是在王保保去世后,北元的军事力量进一步削弱,无法再对大明构成威胁。于是,双方暂停了正面交锋,转而各自休养生息,积蓄力量,为下一次较量做准备。 此时,朱元璋在正北方向暂时停止了大规模进攻,转而加强防御。他开始修筑军镇,加固长城,以工事来弥补明军在机动性上的不足。与此同时,他还着力强化西北防线,特别是通过控制河西走廊,切断北元与西域的联系;在西南方向,朱元璋剿灭了盘踞在云贵高原上的北元梁王部,彻底消除了北元在大明侧后的最后一颗钉子。此时,北元控制的地区已仅剩下蒙古草原本部和辽东地区。由于蒙古草原的生产力落后,北元最重要的补给来源便是辽东,而辽东也使得北元得以继续控制朝鲜半岛上的高丽政权。 辽东的战略重要性随之显现出来。当时,辽东的北元军由元太尉纳哈出率领,拥有数十万大军,是大明在东北的重大边患。朱元璋早就计划解决辽东问题,但由于初期政务繁忙,他未能立即采取行动。直到洪武二十年(1387年),朱元璋才开始着手解决这一问题。此时,徐达、常遇春、李文忠等名将已去世,朱元璋任命了当时最有威望、最能打的冯胜为征虏大将军,傅友德和蓝玉为左右副将军,共同率领20万明军征讨辽东。此外,朱元璋还派遣了郑国公常茂(常遇春之子)、曹国公李景隆(李文忠之子)、申国公邓镇(邓愈之子)等人参战,旨在培养新的军事人才,积累实战经验。20万明军浩浩荡荡地向辽东进发,北元的辽东军队纷纷溃败,明军势如破竹,迅速逼近纳哈出的巢穴金山。纳哈出在面对明军强大的攻势后,士气低落,不得不选择投降。冯胜趁机派遣纳哈出部将乃剌吾携带朱元璋的诏书前去招降,纳哈出看到局势无法挽回,最终选择了投降。纳哈出和他20万部众归附大明,朱元璋大喜,决定将纳哈出部迁至长城外,并设立朵颜、泰宁和福余三卫,作为大明长城外的防线。为了加强对辽东的控制,朱元璋还从内地迁移了大量人口到辽东屯垦。自安史之乱后,汉人军旗时隔600多年再次插上了辽东,标志着大明对这一战略区域的牢固掌控,辽东成为大明在东北的基地,维持了约200年的经略。 冯胜征辽时,北元附属国高丽也派遣了4万兵力协助北元作战。然而,高丽的指挥官在前线看到明军的强大战斗力后,意识到只有向大明投降才是出路。尽管高丽国内的守旧势力仍然认北元为大哥,这位指挥官却毅然带领4万军队攻破了高丽王城,完成了类似黄袍加身的政治剧变,随即向大明称臣纳贡。朱元璋对他的归顺表示满意,并赐予他新的国号——朝鲜,李成桂因此成为李氏朝鲜的建立者。