The missing semester of your CS education--元编程

本文档介绍了元编程的概念,包括构建系统、依赖管理和持续集成的重要性。探讨了构建系统如make的工作原理,解释了依赖管理中的版本控制和如何处理依赖关系,最后简述了持续集成系统的功能及其在自动化测试和部署中的应用。
摘要由CSDN通过智能技术生成

课程结构

01.课程概览与 shell
02.Shell 工具和脚本
03.编辑器 (Vim)
04.数据整理
05.命令行环境
06.版本控制(Git)
07.调试及性能分析
08.元编程
09.安全和密码学
10.大杂烩
11.提问&回答

本文档修改自这里,补充了一些视频中展示但配套文档中未提供的代码,以及一些注释,另外,本节中涉及的相关文件可在百度云链接中获取。

元编程

我们这里说的 “元编程(metaprogramming)” 是什么意思呢?好吧,对于本文要介绍的这些内容,这是我们能够想到的最能概括它们的词。因为我们今天要讲的东西,更多是关于 流程 ,而不是写代码或更高效的工作。

本节课我们会学习构建系统、代码测试以及依赖管理。在您还是学生的时候,这些东西看上去似乎对您来说没那么重要,不过当您开始实习或走进社会的时候,您将会接触到大型的代码库,本节课讲授的这些东西也会变得随处可见。

必须要指出的是,“元编程” 也有用于操作程序的程序之含义,这和我们今天讲座所介绍的概念是完全不同的。

构建系统

如果您使用 LaTeX 来编写论文,您需要执行哪些命令才能编译出您想要的论文呢?执行基准测试、绘制图表然后将其插入论文的命令又有哪些?或者,如何编译本课程提供的代码并执行测试呢?

有很多工具可以帮助我们完成这些操作,这些工具通常被称为 “构建系统”。您需要定义依赖、目标和规则。您必须告诉构建系统您具体的构建目标,系统的任务则是找到构建这些目标所需要的依赖,并根据规则构建所需的中间产物,直到最终目标被构建出来。

make 是最常用的构建系统之一,您会发现它通常被安装到了几乎所有基于UNIX的系统中。make并不完美,但是对于中小型项目来说,它已经足够好了。当您执行 make 时,它会去参考当前目录下名为 Makefile 的文件。所有构建目标、相关依赖和规则都需要在该文件中定义,它看上去是这样的:

~ $ vim makefile
~ $ cat makefile
paper.pdf: paper.tex plot-data.png
	pdflatex paper.tex

plot-%.png: %.dat plot.py
	./plot.py -i $*.dat -o $@
  • 这个文件中的指令,即如何使用右侧文件构建左侧文件的规则
  • 冒号左侧的是构建目标,冒号右侧的是构建它所需的依赖
  • 缩进的部分是从依赖构建目标时需要用到的一段程序
  • 规则中的 % 是一种模式,它会匹配其左右两侧相同的字符串
    • 如果目标是 plot-foo.pngmake 会去寻找 foo.datplot.py 作为依赖

make 中,第一条指令还指明了构建的目的,如果您使用不带参数的 make,这便是我们最终的构建结果。或者,您可以使用这样的命令来构建其他目标:make plot-data.png

现在,让我们看看如果在一个空的源码目录中执行make 会发生什么?

$ make
make: *** No rule to make target 'paper.tex', needed by 'paper.pdf'.  Stop.

make 会告诉我们,为了构建出paper.pdf,它需要 paper.tex,但是并没有一条规则能够告诉它如何构建该文件。让我们构建它吧!

$ touch paper.tex
$ make
make: *** No rule to make target 'plot-data.png', needed by 'paper.pdf'.  Stop.

哟,有意思,我们是构建 plot-data.png 的规则的,但是这是一条模式规则。因为源文件data.dat 并不存在,因此 make 就会告诉您它不能构建 plot-data.png,让我们创建这些文件:

$ cat paper.tex
\documentclass{
   article}
\usepackage{
   graphicx}
\begin{
   document}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值