Win32 构建过程¶
Win32 与当前 SVN 情况有些复杂,所以我要专门使用一个段落来介绍。综上所述,Win32 的问题是 SVN 将自己的配置文件标记为只读,这会导致安装示例的问题,并且 2.0 的 cp 程序有 unix 路径 <-> Windows 路径问题,值得注意的是,他们没有把 xxxyyy 作为Windows 路径,他们将 d:xxxyyy 当作 Windows 路径。
有两种解决方案:快速的,是一个简洁的示例。慢的一个,最好偶尔进行一次慢速操作以获得最新的示例,其余的使用快速解决方案即可。缓慢的解决方案解决了旧版本 mingw 工具的一些问题。
除了 SVN 目录只读问题外,Vista 也存在问题,并且在一些 mingw 在 PATH 语句大小上也存在问题。
缓慢的解决方案:SVN导出¶
在开始之前,先定义目录(我的默认设置):
d:pp 是我目前安装 FPC 的目录和 d:ppbini386-win32 FPC 可执行文件目录在 %PATH% 中
d:fpcSVN 是我检出SVN 仓库的目录,我没有构建它
d:fpc 是我导出SVN 仓库的目录
d:fpcrel 是用于构建FPC 2.4.0 的目录
另一个重要问题是:确保 CYGWIN 的目录在不在环境变量 PATH中!!!原因是,在 mingw 找到后会使用 cygwin 的 sh.exe,简单的说,FPC 提供的工具和 cygwin 提供的工具是重复的,如果存在环境变量中,那么,将使用 cygwin 提供的工具,而不是 FPC的。因此,要保证,cygwin 可执行程序目录不在环境变量 PATH 中!!!
然后,为了构建和安装快照,我们需要更新 SVN:
请注意,make clean 目标仅清除当前 $FPCTARGET。要严格清理所有,删除所有.o,.a 和 .ppu 文件,然后 SVN 再次更新,以恢复 FPC 树中的少量.o文件夹(主要用于与C链接测试相关的组件)。
1 2 | cd /d d:\
svn up fpcSVN
|
然后,我们导出它:
1 2 3 4 5 | # 清理以提高性能
cd fpc
make clean
cd ..
svn export --force fpcSVN fpc
|
现在,开始构建:
1 2 | cd fpc
make clean all OPT='-gl' FPC=d:\fpcrel\bin\i386-win32\ppc386.exe
|
如果安装成功(所有内容在一行)
make install OPT='-gl' INSTALL_PREFIX=d:\pp11 UPXPROG=echo FPC=d:\fpcrel\bin\i386-win32\ppc386
有些事你需要注意:
确保CYGWIN 目录不在环境变量 PATH中!!!Mingw/msys 也有问题,但很少见(见 2.6.4)
选项(OPT=’-gl’)将传递给 make install,这是因为单元依赖性故障和实用程序,在安装过程中(更新)构建了少量代码。这适用于所有与安装无关的构建选项。
UPXPROG=echo 避免对生成可执行文件进行 UPX 压缩,以便可以调试程序。如果想减少程序体积,将删除该项,并将 SMART=1 添加到命令行中。注意,UPX虽然可以减少了程序体积,但浪费了比磁盘更昂贵的内存 1。
在SVN导出时,增加 force 参数,用于强制覆盖原来的存储库。如果构建出错,时间长了,请尝试在导入之前删除导出目录(d:fpc)。
快速解决方案:COPYTREE¶
快速解决方案利用仅用于复制示例的命令来完成递归复制。更新(已安装的)示例在日常更新中并不重要,人们通常希望避免缓慢的 SVN 导出。make 文件中用于递归复制的是 COPYTREE,然后我们使用与前面相同的技巧通过指定 echo 命令来禁用它:
make install COPYTREE=echo
VISTA特定主题:install.exe¶
Vista 在某些方面相当苛刻,在将来会有更多的问题,特别是在发布工程方面。(考虑到根目录中的临时文件,不允许在 appdir 中写入,等等)。然而,有一个小问题,也是一个正常的构建。
这个问题实际上是通过自动弹出 UAC 来避免安装干扰(否则你将不得不以管理员的身份运行,这对用户而言不是很友好),但它是半实现的。任何名称中包含安装,设置或更新的 EXE 都会弹出UAC,但是。UAC 提示控制台应用程序会失败 2。
FPC 构建系统使用 GNU 安装(作为 ginstall.exe)文件需要有适当权限,并且由于 UAC失败。问题的定义也意味着解决方案:
将 (g)install.exe 文件复制到一个没有关键字的新名称,我使用 myinst.exe
将 GINSTALL=myinst.exe 传递给命令行:
make install GINSTALL=myinst.exe
附:通过添加清单,此 Vista/Windows 7 问题已在2.4.0中解决。
把它们放在一起¶
这是我在 Windows 上使用的批处理文件:(FPC源代码在 d:repofpc)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | @echo on
set BASEDRV=c:
set SRCDIR=%BASEDRV%\repo\fpc set PPCNAME=ppc386
set FPCSTART=c:\fpc\2.4.0\bin\i386-win32\%PPCNAME%
set LOGDIR=%BASEDRV%\repo
set INSTALLDIR=%BASEDRV%\pp11
REM 一些随机设置
set OPTS=-gl -dSAX_HTML_DEBUG -dUSE_MINGW_GDB
set COMMONOPTS=UPXPROG=echo COPYTREE=echo OPT="%OPTS%" GINSTALL=myinst.exe
rem === 不变部分 ===
cd /d %SRCDIR%
REM 构建
make clean all %COMMONOPTS% FPC=%FPCSTART% 1> %LOGDIR%\buildlog.txt 2>&1
REM 单独的安装步骤,用于交叉版本(在unix sudo下)(在一行)
make install %COMMONOPTS% INSTALL_PREFIX=%INSTALLDIR% FPC=%SRCDIR%/compiler/%PPCNAME% 1> %LOGDIR%\installlog.txt 2>&1
|
实际上,我有几个这样的配置,一个是64位的,一个用于交叉编译到 wince 等,win64是一个副本,仅在路径中的 x86_64-win64 和 ppcx64,而不是 ppc386 中。请注意,所以变量都位于批处理文件中,这样可以通过调整路径轻松移植到其它系统中。有几台计算机和不同的路径是编写的原因。
不幸的是,纯批处理文件有限,不能在上面投入太多时间。