对于 Mac 的 FoC 环境搭建

适用于 CDS 新生(Mid 2025) 中 Mac 用户的 FoC 课程环境搭建教程

本文是面向初心者的。老登偷偷的进来,打枪的不要!

如果你跟着所有的工序做一遍,就都会了。

笔者是 24 CST 的,有一大堆设备,其中不乏 Mac。你以为我要悲情叙事了,讲述什么“大一小白痛苦踩坑经历”什么的,错误的。

笔者已经是老油条了,可以 男娘学姐带你们装arch ,带您们激情四射爆揍鱼壳。

蓝色尖头,开源大In(stall) party。9月14日、9月15日,来势汹汹的 Arch Linux 激爆网络神秘地带,加上风靡多年的GNU,将你推向AM极D,不用麻醉,一样情不自禁hi起来,飞起来。

如题,笔者发现当年(2024)有很多同学使用 Mac。很多人叫苦不迭(thats WHY I 悲愤!!),于是我觉得有必要搞一下这个。

Foundation of C Programming 官方课程环境

我先给PPT中的环境列出来:

  • IDE:Pelles C
    • Windows Only
    • 编译器是自带的pocc
    • 多年未更新的老登东西
    • 不支持现代C标准
  • 作业评测:AutoLab
    • GNU/Linux 环境(笔者hack出来是个老Ubuntu,搭配Skylake Xeon)
    • GNU GCC (我们邪恶山羊头在发力)

显然 Windows + PLC 这一套是不入流的东西,我们不需要使用。老登课程不更新也能用,就摆了,那有什么办法(

进行一个批判

我们是高贵的、血统纯正的 Macintosh 用户,怎么能和微♂软系同流合污!

众所周知,Windows这个平台,在这一块的是 Developer anti-friendly 的,对开发者不友好的。它对开发者不友好了,那开发者再用它,就是小M♂了。

我们C语言的体系,一整个都是建立在类Unix上的!

关于Windows用户们可以选择的主流体系,有三条路:

  • MSVC 全M$化
  • MinGW 在POSIX大环境进行一个交叉编译!
  • WSL2/VM 虚拟化启动一个类Unix

显然我们课程使用的Pelles C 是最不入流的路边一条。

启动!

介绍一下选项

因为C这一块的是手动挡,不像 py/ruby 那种解释型语言,我们需要一个编译器,而在 macOS 平台上可以使用的选项有:

  • LLVM Clang
  • GCC on macOS(我也不知道是什么玩意儿)
  • Linux 生态
    • VM开 arm64 Debian(为什么不推荐蓝色尖头呢,因为archarm非官方支持)
    • 容器(也都是底下是Linux VM)
  • 逆天的
    • PD VM + Windows on ARM + MSVC
      等一大堆。

就用最主流吧!评价最高的Clang

找到 Terminal

试着在你的 dock 栏(屏幕最下面那一条)找到“启动台”(通常是第二个)
(因为我已经上到了 macOS 26 Beta 所以是App)

然后在最顶端的输入框里,输入“Terminal.app”(相信 macOS 会自动补全的,你只需要按一下回车)

然后出来这么一个窗口,这是一个非常重要的东西你们以后会用到的只要是CST学生就会用到我们用处非凡强大的终端模拟器模拟tty是正确的计算机的核心

如果找不到呢,也没关系(如果你连 Launchpad 都找不到了?)

command键+空格键,或者直接按一下F4键,进入聚焦搜索,然后输入 Terminal.app 回车就好。

安装 Xcode 命令行工具

为什么呢?

因为这是苹果官方支持的方式,而且就算使用brew装别的东西也绕不开它,因为里面有git。

之后,我们输入:

1
xcode-select --install

我们在这里使用的是Shell,Shell是一个壳,用以使用命令和OS交互。macOS默认的Shell是zsh。

如果没有安装过的话,会弹出一个窗口,询问是否要安装“Xcode命令行工具”,在这里就要你自己选择了。
(如果你想选否……那我问你,?)

在安装完毕后,再开一个Terminal窗口(用以刷新PATH防止找不到),输入

1
clang -v

如果看到以下输出,就是成功了

不成功有以下的原因

  1. 你点否了(或者是别的消极选项)
  2. 网不好
  3. 中途断了
    否则很难失败。如果失败了,重新xcode-select --install

这时候,我们就可以测试构建了

1
2
3
void main() {
return;
}

这是一个最基础的C语言程序对吧

复制一下它,带好了,一会要用。

用一下 VIM

在 Terminal 里输入vim a.c

vim 是一个很自由的命令行文本编辑器,可以爆改得很帅,但是目前你们看到的 vim 还不会帅,所以我推一个配置(广告时间)
https://blog.zlicdt.top/2025/06/05/vim-configure/

打开之后按i键,进入INSERT模式

之后将刚才的C语言代码复制粘贴到里面,按esc键退出INSERT模式。

之后输入:wq,退出 vim。

我在这里解释一下,:代表后面跟的是命令,w是 write 写入,q是 quit 退出。

之后我们就回到了 Shell。

执行ls,就可以看到目录下多出来的a.c文件。ls是一个用于列出当前目录下文件或目录的命令(老登建议使用eza替代)。

编译

1
clang a.c

就会看到主目录下出现了一个叫a.out的文件,这就是编译成果了,一个二进制文件,可以执行。a.out是 gcc/clang 默认的输出文件名。

1
./a.out

然后会看到,执行完毕什么也没有,这是因为本来程序就是空的。不过,执行成功了就好。

虽然到这里就好了,但是你还是要学会删除文件的命令(我相信你们有耳闻rm -rf),删除这俩临时文件。

1
rm -f a.c a.out

掘地三尺!同学们

文本编辑器

现在好了,编译器有了,代码搁哪写呢?

我们有以下的选择,包括但不限于:

  • vscode + C/C++ extension
  • CLion
  • Xcode
  • VS for mac
  • vim + ycm
  • emacs
  • nano
  • Atom
  • notepad.exe
  • cat << EOF >> *.c
  • echo xxx \ >> *.c
  • ……

那怎么办呢,太多了,哎呀选不过来……你一定注意到,我列出的都是能编辑文本就行的东西,何必痛苦选择呢?

然而CLion(现在非商业用途已经不收费了)和Xcode都巨大,而且Xcode偏门反人类(笑话,我都做了好久SwiftUI开发),vim + ycm不适合小白……

我搁着先写vscode + C/C++ extension

VSCode Universal

(如果你们安装了homebrew的话我一定会写brew install的)

打开 https://code.visualstudio.com

布局已经大改了,点击这个抽象按钮

然后就开始下载了,堆在右下角下载那堆叠里面

给它拖到到Applications里,就完事了,装完了(呀↗️)

打开之后,在左边找到这图标

点击之后在上面的搜索栏输入C/C++,会自动搜索。之后,安装这个:

之后就好了,关于VSCode咋用,相信大家都会问LLM了,这里不再赘述,总之有语法高亮和自动补全了……

遇到了问题!

呀!不能GUI操作LLDB!甚至程序跑起来,人无法与terminal交互!

这是macOS在Apple Silicon时代T2末期的安全政策收紧,从10.15之后,就这样了。如今是无解的。

怎么办呢?不怕,试试我给Q酱写的脚本!哎,怎么传达出去呢~
https://github.com/zlicdt/compile4run

用法参见仓库的README,执行完我提供的命令之后,就可以使用形如

1
compile4run a.c

这种形式的命令来编译并运行程序了。

打包 📦(重要)

这是一个很严重的、叫苦不迭的点

在这一块的,autolab需要打包为.zip,还好

但是这玩意的脚本是怎么写的呢?我来依靠行为给你逆推一下:

1
2
3
unzip x114514191.zip
gcc *.c -o main.o
judge.py -? ./main.o

大差不差,相信老登们已经发现了:
呀,压缩包的root直接就是这堆源文件,不能套一层文件夹,不然就是cc: error: no input files

所以,这样做:

1
2
3
4
5
cd 你的源码目录
ls # 检查一下现在是否下面直接就是那堆源码文件了
zip x114514191 *.c *.h
# 这里的压缩命令,如果目录下没有对应的文件,zsh会报匹配不上的问题
# 参见我最后放的视频

其中x114514191是你的学号。

之后上传这个x114514191.zip,就万无一失了,否则会触发对机魂的曲解导致的斩杀

关于 Project

在学期的最后,你们要做一个Project。他们会给出一个Requirements清单,按照上面的要求,实现一个命令行交互的程序,通常是CRUD内容。要求使用多文件、宏定义与编写头文件以复用函数。

我有同学,喜爱旁门左道的操作系统Windows,然后做出了什么事件呢?

使用了<windows.h>

大家都知道,Autolab是一个GNU/Linux环境,使用glibc的老旧Ubuntu。编译器还是GNU GCC,使用GCC lib。然而windows.h是MSVC的东西,这样会发生什么事情呢?

fatal error: ‘windows.h’ file not found

在我们Project最终提交前一天晚上,会开Autolab提交以在Autolab的环境构建一次,以确保程序是合规的。

在CST,就很难使用Windows的。

之后无法构建,因为引入了不存在的头文件。临提交前几个小时,开始手忙脚乱得修改。

这就结束了吗?错误的。这位同学想玩点花样,在结束一步的操作之后,试图清屏。因为这位同学实在是太喜欢Windows了,于是在这份代码中,使用了:

1
system("cls");

md,本来你调用shell命令的行为就很恶意了(我是没敢用的),但是我们的课程比较宽容,这样也是被允许的——

在我们类Unix环境下应当使用:

1
2
3
4
#include <stdlib.h>
// ...
system("clear");
// ...

当然,这次构建可以通过了,最后到了TA那里——

sh: cls: command not found

那怎么办嘛,爆掉了……

所以,一定要使用我们在C language这一块使用原生态的类Unix生态。

后记

视频资料已经在 https://www.bilibili.com/video/BV1rRa4zGEQW 放置。

找我聊请用电子邮件,我觉得大概好了,如果再出来错误就告知我,进行修改。

在Macintosh平台,有各种安全限制。不过要游刃有余的话,请来蓝色尖头邪恶企鹅神教。注意我们可能存在的in(stall) party。9月14/15日是为了neta极地大冲击,不一定是正确的日期。

如果有图加载不能的话,是该使用魔法的时间了。


对于 Mac 的 FoC 环境搭建
https://blog.zlicdt.top/2025/09/10/macfoc/
作者
zlicdt
发布于
2025年9月9日
许可协议