【C++】Scoop 包管理器与 MinGW 工具链详解

Scoop 包管理器与 MinGW 工具链详解

📦 什么是 Scoop,Scoop的历史?

Scoop 是 Windows 平台上的命令行包管理器,类似于 Linux 的 aptyum 或 macOS 的 Homebrew。它让 Windows 用户可以通过简单的命令行操作来安装、更新和管理软件。

Scoop 诞生于 2013 年左右,是 Windows 平台上一款"类 Homebrew"的命令行包管理器。

它的出现背景很简单:当时 Windows 用户想装开发工具得挨个去官网下载、手动改 PATH,既繁琐又容易把系统目录弄脏;而 Linux 有 apt/yum、macOS 有 Homebrew,Windows 却没有趁手的同类工具。作者 Luke Sampson 于是用 PowerShell 写了 Scoop,目标是"一条命令就把软件干净地装进用户目录,卸载时不留残渣"。

2013--2015 年:

  • 项目放在 GitHub,早期只维护一个主 bucket(软件仓库),以开源/命令行小工具为主。
  • 采用"portable 优先"策略:尽量下载压缩包,解压后把可执行文件软链到 /scoop/shims,避免写注册表、不写系统目录,因此无需管理员权限即可安装。

2016--2018 年:

  • 社区开始大量贡献"bucket",出现 extras、versions、java、games 等独立仓库,软件数量从几百增长到几千。
  • 引入自动更新机制(checkver + autoupdate 脚本),上游一发新版,官方仓库几小时内就能自动生成新 manifest。
  • 国内用户群体扩大,知乎、CSDN 出现大量安装教程,"Windows 上的 Homebrew"这一口号被普遍接受。

2019--2020 年:

  • 核心代码逐渐模块化,支持多架构(32/64 bit)、多语言运行环境(nodejs、python、ruby 等)。
  • 微软官方推出 winget 预览版,外界曾担心 Scoop 会被"招安"或边缘化,但作者和核心维护者仍保持独立更新,继续走"用户空间、零权限、绿色安装"路线。

2021 年至今:

  • 项目进入"半社区自治"状态:Luke Sampson 淡出日常维护,由 lukesampson/scoop 组织里几位核心成员合码、Review PR。
  • 功能迭代放慢,没有官方路线图,但 bucket 生态继续膨胀,仅官方主仓库就超过 1 000 款软件,extras 仓库更达 4 000+。
  • 国内镜像源、一键换源脚本、GUI 前端(如 ScoopGUI)相继出现,进一步降低了上手门槛。

一句话总结:

Scoop 从 2013 年个人 side-project 起步,凭借"不写系统目录、无需管理员、卸载干净"的差异化定位,在 Windows 包管理圈子里站稳了脚;虽然后来 winget 入局,但它仍以灵活、轻量、社区驱动的方式继续存活并迭代。

Scoop 的核心优势

  1. 自动化安装:一条命令完成下载、安装、配置
  2. 自动配置环境变量:无需手动设置 PATH
  3. 版本管理:轻松切换软件版本
  4. 干净卸载:卸载时自动清理相关文件
  5. 集中管理:所有软件统一管理,一目了然

安装 Scoop

powershell 复制代码
# 1. 打开 PowerShell(以普通用户权限即可,不需要管理员)

# 2. 设置执行策略(如果遇到权限问题)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

# 3. 安装 Scoop
irm get.scoop.sh | iex

Scoop 常用命令

powershell 复制代码
# 安装软件
scoop install <软件名>

# 卸载软件
scoop uninstall <软件名>

# 更新软件
scoop update <软件名>

# 更新所有软件
scoop update *

# 查看已安装软件
scoop list

# 搜索软件
scoop search <关键词>

# 查看软件信息
scoop info <软件名>

实际应用示例

使用 Scoop 安装开发工具链:

powershell 复制代码
# 安装 MinGW(包含 GCC 编译器)
scoop install mingw

# 安装 CMake(构建系统生成器)
scoop install cmake

# 安装 Git(版本控制)
scoop install git

# 验证安装
gcc --version
cmake --version
git --version

🔧 MinGW、GCC 和 Makefile 的关系

基本概念

GCC (GNU Compiler Collection)
  • 定义:GNU 编译器集合,包含 C、C++、Fortran 等多种语言的编译器
  • 作用:将源代码编译成可执行文件或目标文件
  • 平台:主要在 Linux/Unix 系统上使用
MinGW (Minimalist GNU for Windows)
  • 定义:Windows 平台上的 GCC 移植版本
  • 作用:在 Windows 上提供 GCC 工具链
  • 包含
    • gcc.exe - C 编译器
    • g++.exe - C++ 编译器
    • make.exe - 构建工具
    • ar.exe - 归档工具
    • ld.exe - 链接器
    • 其他开发工具
Makefile
  • 定义:构建脚本文件,定义了项目的编译规则和依赖关系
  • 作用 :告诉 make 工具如何编译和链接项目
  • 格式:使用 Makefile 语法编写

三者关系图解

复制代码
┌─────────────────────────────────────────────────┐
│              源代码文件 (.cpp, .c)              │
└───────────────────┬─────────────────────────────┘
                    │
                    ▼
        ┌───────────────────────┐
        │   Makefile             │
        │   (构建规则文件)        │
        └───────────┬─────────────┘
                    │
                    ▼
        ┌───────────────────────┐
        │   make.exe              │
        │   (来自 MinGW)          │
        │   读取 Makefile         │
        └───────────┬─────────────┘
                    │
                    ▼
        ┌───────────────────────┐
        │   gcc/g++.exe         │
        │   (来自 MinGW)         │
        │   编译源代码           │
        └───────────┬─────────────┘
                    │
                    ▼
        ┌───────────────────────┐
        │   目标文件 (.o)        │
        └───────────┬─────────────┘
                    │
                    ▼
        ┌───────────────────────┐
        │   gcc/g++.exe         │
        │   (链接器)             │
        │   链接目标文件         │
        └───────────┬─────────────┘
                    │
                    ▼
        ┌───────────────────────┐
        │   可执行文件 (.exe)    │
        └───────────────────────┘

详细工作流程

1. 编写源代码
cpp 复制代码
// main.cpp
#include <iostream>
int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}
2. 创建 Makefile
makefile 复制代码
# Makefile
main.exe: main.cpp
    g++ main.cpp -o main.exe

clean:
    del main.exe
3. 执行构建
bash 复制代码
# make.exe(来自 MinGW)读取 Makefile
make

# make 发现需要 main.exe,依赖 main.cpp
# 执行命令:g++.exe main.cpp -o main.exe
# g++.exe(来自 MinGW)编译并生成 main.exe
4. 运行程序
bash 复制代码
.\main.exe
# 输出:Hello, World!

关系总结

组件 角色 作用
MinGW 工具链集合 提供 Windows 上的 GCC 工具(gcc、g++、make 等)
GCC/G++ 编译器 将源代码编译成目标文件,链接成可执行文件
Makefile 构建脚本 定义编译规则,告诉 make 如何调用编译器
make 构建工具 读取 Makefile,执行编译命令

实际开发中的完整流程

使用 CMake + MinGW 的典型流程
bash 复制代码
# 1. CMake 读取 CMakeLists.txt,生成 Makefile
cmake ..

# 2. make(来自 MinGW)读取生成的 Makefile
make

# 3. g++(来自 MinGW)编译源代码
# (make 内部调用 g++)

# 4. 生成可执行文件
.\hello.exe
CMakeLists.txt 示例
cmake 复制代码
cmake_minimum_required(VERSION 3.10)
project(HelloCMake LANGUAGES CXX)

add_executable(hello main.cpp)
CMake 生成的 Makefile(简化版)
makefile 复制代码
# CMake 自动生成的 Makefile(简化示例)
hello.exe: main.cpp
    g++ main.cpp -o hello.exe

🚀 完整安装和使用指南

第一步:安装 Scoop

powershell 复制代码
# 在 PowerShell 中执行
irm get.scoop.sh | iex

第二步:使用 Scoop 安装 MinGW

powershell 复制代码
# 安装 MinGW(包含 gcc、g++、make)
scoop install mingw

第三步:验证安装

powershell 复制代码
# 检查 GCC
gcc --version
# 输出示例:gcc (MinGW.org GCC-8.2.0-5) 8.2.0

# 检查 G++
g++ --version
# 输出示例:g++ (MinGW.org GCC-8.2.0-5) 8.2.0

# 检查 Make
make --version
# 输出示例:GNU Make 4.2.1

第四步:创建测试项目

bash 复制代码
# 创建项目目录
mkdir test-project
cd test-project

# 创建源代码
echo '#include <iostream>
int main() {
    std::cout << "Hello from MinGW!" << std::endl;
    return 0;
}' > main.cpp

# 创建 Makefile
echo 'main.exe: main.cpp
	g++ main.cpp -o main.exe

clean:
	del main.exe' > Makefile

# 编译
make

# 运行
.\main.exe

📚 扩展阅读

Scoop 有哪些值得安装的软件

下面这份清单把"装完就能显著提升效率、且几乎不会踩坑"的软件按场景分好类,全部来自 Scoop 现成仓库,复制命令即可一键安装。排名不分先后,但都是各品类里"用过就回不去"的口碑款。


  1. 终端 & 命令行基础设施
  2. git -- 版本控制,必装
  3. sudo -- Windows 里临时提权,再也不用"以管理员身份运行"
  4. 7zip / unzip -- 压缩/解压全格式,体积小巧
  5. curl / wget -- 下载、调试接口
  6. busybox -- 100+ Linux 常用命令一次性补齐
  7. vim / nano -- 随手改配置文件

  1. 开发环境一条龙
  2. vscode -- 宇宙级编辑器,插件生态无敌
  3. nodejs / python / go / rust -- 语言全家桶,自动配 PATH
  4. jdk17 / maven / gradle -- Java 后端三件套
  5. cmake / gcc -- C/C++ 编译链
  6. docker-cli -- 本地镜像/容器操作,配合 Docker Desktop 更香

  1. 文件与系统管理
  2. everything -- 秒搜全盘文件名,体积不到 2 MB
  3. snipaste -- 贴图+标注神器,截图党必备
  4. lockhunter -- 解锁被占用的文件/文件夹
  5. winscp -- SFTP/FTP 图形客户端
  6. beyondcompare -- 文件/文件夹差异对比,合并利器
  7. syncthing -- 开源跨设备同步,无云也能秒同步

  1. 日常办公 & 写作
  2. typora -- Markdown 实时预览,写作体验天花板
  3. notepadplusplus -- 轻量文本/代码编辑器
  4. foxit-pdf / sumatrapdf -- 极速 PDF 阅读器
  5. wpsoffice -- 免费办公三件套
  6. xmind -- 思维导图,会议整理神器

  1. 媒体与娱乐
  2. potplayer -- 最强本地播放器,解码格式全覆盖
  3. obs-studio -- 直播/录屏/推流一站式
  4. imageglass -- 开源看图工具,秒开大图
  5. ffmpeg -- 音视频转码、提取、压缩命令行全能王

  1. 网络 & 安全小工具
  2. wireshark -- 抓包排障,网络工程师标配
  3. nmap -- 端口扫描、资产发现
  4. postman -- API 调试、Mock 服务
  5. keepass / bitwarden-cli -- 密码库本地+云双保险

  1. 字体与美化
  2. FiraCode-NF / JetBrainsMono-NF -- 连字+图标一体化,终端/Vim 颜值翻倍
  3. mactype -- 让 Win10/11 字体渲染瞬间"苹果化"

  1. 极客向 Bonus(按需)
  • powertoys -- 官方效率套装(批量重命名、窗口置顶、颜色选择器等)
  • processhacker -- 比任务管理器更强大的进程/服务查看器
  • dnspy -- .NET 反编译调试
  • sysinternals -- 微软官方 70+ 系统级工具合集

一条命令全装示例(按需要自行删减)

powershell 复制代码
scoop install sudo 7zip git curl vim everything vscode nodejs python jdk17 maven typora potplayer snipaste notepadplusplus imageglass ffmpeg keepass foxit-pdf FiraCode-NF

以上软件均收录在 main / extras / nerd-fonts 等官方维护仓库,更新及时、卸载干净,可放心食用。

MinGW vs MSVC

特性 MinGW (GCC) MSVC
平台 Windows Windows
许可证 GPL/LGPL 专有
标准支持 最新 C++ 标准 最新 C++ 标准
跨平台 是(Linux/Mac 也用 GCC)
性能 优秀 优秀

为什么选择 MinGW?

  1. 跨平台一致性:Linux/Mac 也用 GCC,代码更容易移植
  2. 开源免费:完全免费,无授权问题
  3. 标准支持:对 C++ 标准支持及时
  4. 工具丰富:GDB 调试器、Valgrind 等工具支持

其他相关工具

  • CMake:构建系统生成器,可以生成 Makefile
  • Ninja:更快的构建系统,CMake 也可以生成 Ninja 文件
  • GDB:GNU 调试器,用于调试程序
  • Clang:另一个优秀的 C++ 编译器

🎯 总结

  1. Scoop 是 Windows 上的包管理器,让软件安装变得简单
  2. MinGW 是 Windows 上的 GCC 工具链,提供编译器和构建工具
  3. GCC/G++ 是编译器,负责将源代码编译成可执行文件
  4. Makefile 是构建脚本,定义编译规则
  5. make 是构建工具,读取 Makefile 并执行编译命令

它们的关系是:

  • MinGW 提供工具(gcc、g++、make)
  • Makefile 定义规则
  • make 执行规则
  • gcc/g++ 执行编译

使用 Scoop 安装 MinGW 是最简单的方式,一条命令就能完成安装和配置!


相关推荐
yanghuashuiyue2 小时前
Java过滤器-拦截器-AOP-Controller
java·开发语言
hetao17338372 小时前
2025-12-11 hetao1733837的刷题笔记
c++·笔记·算法
小冷coding2 小时前
【Java】高并发架构设计:1000 QPS服务器配置与压测实战
java·服务器·开发语言
破刺不会编程2 小时前
socket编程TCP
linux·运维·服务器·开发语言·网络·网络协议·tcp/ip
北极糊的狐2 小时前
IDEA中安装 CamelCase 插件实现变量快速生成驼峰命名
开发语言·php
【蜡笔小新】2 小时前
《筑基篇》C语言基础2
c语言·开发语言
洛阳泰山3 小时前
Java实现周易六爻自动排盘:根据起卦的公历时间换算农和干支时间,推算日柱空亡(旬空)
java·开发语言·周易·六爻·算卦
saltymilk3 小时前
C++ 语言特性的变更可能让你的防御成为马奇诺防线
c++
Smile丶凉轩3 小时前
C++ 高性能内存池面试题总结
开发语言·c++