编译快照 make all 或 make build

make all 它是最重要的构建过程,基本上构建(但不是安装)标准 SVN 仓库的通用部分(见1.7),除了不相关的,如文档,示例和测试。安装是另外一个 make 文件命令。

最简单的构建快照是检出 SVN(见1.3.3),切换到项目根 fpc/ 目录并调用 make all。通过执行 make install 来安装到默认位置。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  cd /fpc/fpc make all
  # 构建所有,在XP、2000以上需要3分钟左右,500MHz的电脑上需要10-15分钟
  make install

  # 安装快照到默认位置
  # (/usr/local/lib/fpc/$FPCVERSION 里面)
  #
  # Windows:
  cd /d d:\repo\fpc make all
  make install COPYTREE=echo
  # (默认在 c:\pp\ 里面)

如果你密切地关注 FPC SVN,这是你经常做的事情。但在某些特殊情况下,需要更多参数。基本上这是构建快照。如果你将 make install 设置在不同的目录中,则该目录的内容本质上就是快照。

最简单的是使用不同编译器。你可以在 make all 后增加 PP=<编译器> 或 PP=/full/path/to/。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
  cd /fpc/devel/fpc
  make all PP=/my/starting/compiler
  #  构建所有,在XP、2000以上需要3分钟左右,500MHz的电脑上需要10-15分钟
  make instal
  # 快照安装到默认位置
  # (/usr/local/lib/fpc/$FPCVERSION 里面)
  #
  # Windows:
  cd /d c:\repo\fpc make all PP=ppcrel
  make install COPYTREE=echo
  # (默认在 c:\pp\ 里面)

安装快照时,安装位置通常让人困惑(如,/usr/local/lib/fpc/2.4.0)这取决于版本号。

如果你按照上面的顺序,生成的编译器(如2.5.1)不等于启动编译器(如2.4.0),那么 make install 将安装在错误的位置。对于 Windows(c:fpc2.4.0 … )也是这样。可以在 make all 中配置编译器来解决此问题。确保 make install 使用的是正确的版本,由于不能使用相对路径,因此必须使用绝对路径,即完整的路径:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
  cd /fpc/devel/fpc
  make all PP=/my/starting/compiler/path/ppc386-someversion
  #
  # 手动指定编译器
  make install PP=/fpc/devel/fpc/compiler/ppc386
  #
  # 安装快照到默认位置
  # (/usr/local/lib/fpc/$FPCVERSION 或更深)
  #
  # 对于 Windows:
  cd /d c:\repo\fpc
  make all PP=c:\fpc\startingcompilers\ppc386-someversion
  #
  # 使用新的编译器来安装
  make install PP=c:\repository\fpc\compiler\ppc386

要安装到不同的目录($PREFIX),通过设置变量 INSTALL_PREFIX 来完成:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  make all PP=/my/starting/compiler
  #
  #  在 /usr/exp 安装系统不存在的包
  #
  make install INSTALL_PREFIX=/usr/exp
  #
  # 在Windows 中
  # FPC 目录在 d:\pp
  #
  cd /d c:\repo\fpc
  make all PP=ppcrel
  make install INSTALL_PREFIX=d:\pp
  #
  # 或者让我们制作一个快照以便上传到某些 unix 站点上:
  #
  #
  cd /fpc/devel/fpc
  make all PP=/my/starting/compiler
  #
  # Make 时创建临时目录 /tmp
  #
  mkdir /tmp/fpc
  make install INSTALL_PREFIX=/tmp/fpc
  #
  # 归档
  #
  cd /tmp/fpc
  tar cvzf /tmp/newsnapshot.tar.gz *
  # 删除临时目录。
  #
  cd /tmp
  rm -rf fpc
  #

最后,可以在编译器命令行添加附加参数,通过 OPT=’<参数>’来完成。经常使用的参数是-d <xxx>以得到测试的值。{$IFDEF xxx},-gl 包含调试信息。-va 还经常用于调试快照构建过程。如果你添加-va,将通过管道输出到文件,当有大量屏幕输出时,构建将变得缓慢。

在使用 FPC 进行开发时添加-gl是一个好习惯,因为它允许你单步执行 GDB 中的所有FPC 运行时库(大致相当于在 Delphi 中“use debug .DCUs”选项)。但生成的快照稍微大一些。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
  cd /fpc/devel/fpc
  make all OPT='-gl'
  # 大量构建 make install
  # 将快照安装在默认位置
  # (/usr/local/lib/fpc/$FPCVERSION 或更深)
  #
  # 在 Windows 中:
  cd c:\cvs\devel\fpc
  make all OPT='-va' &> d:\buildlog.log
  make install
  #
  # 传递多个参数,如:
  #
  #
  make all OPT= -gl -va

留意:当我使用 home 构建快照时,我只将它们安装在旧快照上,make all 成功了。如果在构建或安装期间遇到错误甚至在安装之后(如,臭名昭著找不到 ***单元,但它的确存在),尝试删除 FTP 用户目录下的 units/,并重新执行 make install。这应该可以解决问题。如果没有解决,请尽可能多的检查设置,并阅读第4章。问题通常是由 CVS中更改包(或单元)目录引起的。通常程序不会清理 units/ 目录,安装后,该单元的两个实例存在,这可能导致冲突。

一个好的习惯是在安装新快照之前备份仓库及 FPC 安装目录(compiler + units/ 目录)。这只是为了确保在构建或安装过程中出现问题时有一个正常工作的编译器。这可以使更新、备份、构建、安装的脚本实现自动化。因为我不太喜欢 unix 脚本,我将把它做为练习留给读者。