运行代码
本节阅读量:这一节只解决一个很实际的问题:
|
|
进入代码目录
每章代码都放在:
|
|
例如第一章代码是:
|
|
所以先进入第一章代码目录:
|
|
这里的 cd 是 change directory,意思是切换当前目录。后面的命令都会在这个目录里执行。
构建 mini
进入章节代码目录后,运行:
|
|
它会读取当前目录下的 Makefile,把这一章的 C++ 代码编译成一个小程序:
|
|
mini 就是这一章的命令行工具。每章都有自己的 mini,所以读哪一章,就先进入哪一章的代码目录再运行 make。
如果想清理生成出来的文件,可以运行:
|
|
然后再重新构建:
|
|
运行 mini
构建成功后,当前目录会出现:
|
|
运行解释器:
|
|
这里的意思是:
|
|
查看 AST:
|
|
查看 IR:
|
|
生成汇编:
|
|
这里的 -o out.s 表示:
|
|
汇编怎么执行
out.s 还不是可以直接运行的程序。它只是汇编文本。
在 Linux、WSL 或常见 x86-64 环境里,完整流程是:
|
|
其中:
|
|
如果 examples/add.lang 的内容是:
|
|
最后应该看到:
|
|
注意,这里的 42 是程序退出码,不是 ./out 主动打印出来的内容。退出码通常只适合看小整数。后面章节如果需要真正打印结果,会用运行时或系统调用来做。
macOS 上的差异
macOS 上,程序入口名字通常是 _main,Linux 上通常是 main。mini compile 会按当前系统自动选择。也可以手动指定目标:
|
|
如果你在 Apple Silicon Mac 上,cc 默认可能按 arm64 汇编。但本课程生成的是 x86-64 汇编,所以链接时可以写:
|
|
如果系统没有 x86-64 工具链或 Rosetta,这一步可能会失败。可以先换到 x86-64 Linux、Intel Mac,或者装好对应工具后再继续。
常见问题
如果看到:
|
|
说明当前命令行环境里没有 make。
如果看到:
|
|
说明当前环境里没有 C++ 编译器,或者编译器不在 PATH 里。
这两个问题都不是课程代码的问题,而是本机开发工具还没准备好。你可以先换到已经有 make 和 C++ 编译器的环境,例如 Linux、macOS 或 WSL。