对于 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
等一大堆。
- 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 |
|
我们在这里使用的是Shell,Shell是一个壳,用以使用命令和OS交互。macOS默认的Shell是zsh。
如果没有安装过的话,会弹出一个窗口,询问是否要安装“Xcode命令行工具”,在这里就要你自己选择了。
(如果你想选否……那我问你,?)
在安装完毕后,再开一个Terminal窗口(用以刷新PATH防止找不到),输入
1 |
|
如果看到以下输出,就是成功了
不成功有以下的原因
- 你点否了(或者是别的消极选项)
- 网不好
- 中途断了
否则很难失败。如果失败了,重新xcode-select --install
吧
这时候,我们就可以测试构建了
1 |
|
这是一个最基础的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 |
|
就会看到主目录下出现了一个叫a.out
的文件,这就是编译成果了,一个二进制文件,可以执行。a.out
是 gcc/clang 默认的输出文件名。
1 |
|
然后会看到,执行完毕什么也没有,这是因为本来程序就是空的。不过,执行成功了就好。
虽然到这里就好了,但是你还是要学会删除文件的命令(我相信你们有耳闻rm -rf),删除这俩临时文件。
1 |
|
掘地三尺!同学们
文本编辑器
现在好了,编译器有了,代码搁哪写呢?
我们有以下的选择,包括但不限于:
- 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 |
|
这种形式的命令来编译并运行程序了。
打包 📦(重要)
这是一个很严重的、叫苦不迭的点
在这一块的,autolab需要打包为.zip,还好
但是这玩意的脚本是怎么写的呢?我来依靠行为给你逆推一下:
1 |
|
大差不差,相信老登们已经发现了:
呀,压缩包的root直接就是这堆源文件,不能套一层文件夹,不然就是cc: error: no input files
所以,这样做:
1 |
|
其中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 |
|
md,本来你调用shell命令的行为就很恶意了(我是没敢用的),但是我们的课程比较宽容,这样也是被允许的——
在我们类Unix环境下应当使用:
1 |
|
当然,这次构建可以通过了,最后到了TA那里——
sh: cls: command not found
那怎么办嘛,爆掉了……
所以,一定要使用我们在C language这一块使用原生态的类Unix生态。
后记
视频资料已经在 https://www.bilibili.com/video/BV1rRa4zGEQW 放置。
找我聊请用电子邮件,我觉得大概好了,如果再出来错误就告知我,进行修改。
在Macintosh平台,有各种安全限制。不过要游刃有余的话,请来蓝色尖头邪恶企鹅神教。注意我们可能存在的in(stall) party。9月14/15日是为了neta极地大冲击,不一定是正确的日期。
如果有图加载不能的话,是该使用魔法的时间了。