.. index:: single: Win32 构建过程 Win32 构建过程 ---------------------- Win32 与当前 SVN 情况有些复杂,所以我要专门使用一个段落来介绍。综上所述,Win32 的问题是 SVN 将自己的配置文件标记为只读,这会导致安装示例的问题,并且 2.0 的 cp 程序有 unix 路径 <-> Windows 路径问题,值得注意的是,他们没有把 \xxx\yyy 作为Windows 路径,他们将 d:\xxx\yyy 当作 Windows 路径。 有两种解决方案:快速的,是一个简洁的示例。慢的一个,最好偶尔进行一次慢速操作以获得最新的示例,其余的使用快速解决方案即可。缓慢的解决方案解决了旧版本 mingw 工具的一些问题。 除了 SVN 目录只读问题外,Vista 也存在问题,并且在一些 mingw 在 PATH 语句大小上也存在问题。 缓慢的解决方案:SVN导出 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 在开始之前,先定义目录(我的默认设置): * d:\pp 是我目前安装 FPC 的目录和 d:\pp\bin\i386-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链接测试相关的组件)。 .. code-block:: bash :linenos: cd /d d:\ svn up fpcSVN 然后,我们导出它: .. code-block:: bash :linenos: # 清理以提高性能 cd fpc make clean cd .. svn export --force fpcSVN fpc 现在,开始构建: .. code-block:: bash :linenos: 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虽然可以减少了程序体积,但浪费了比磁盘更昂贵的内存 [#BUILDWIN321]_。 * 在SVN导出时,增加 force 参数,用于强制覆盖原来的存储库。如果构建出错,时间长了,请尝试在导入之前删除导出目录(d:\fpc)。 快速解决方案:COPYTREE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 快速解决方案利用仅用于复制示例的命令来完成递归复制。更新(已安装的)示例在日常更新中并不重要,人们通常希望避免缓慢的 SVN 导出。make 文件中用于递归复制的是 COPYTREE,然后我们使用与前面相同的技巧通过指定 echo 命令来禁用它: ``make install COPYTREE=echo`` VISTA特定主题:install.exe ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Vista 在某些方面相当苛刻,在将来会有更多的问题,特别是在发布工程方面。(考虑到根目录中的临时文件,不允许在 appdir 中写入,等等)。然而,有一个小问题,也是一个正常的构建。 这个问题实际上是通过自动弹出 UAC 来避免安装干扰(否则你将不得不以管理员的身份运行,这对用户而言不是很友好),但它是半实现的。任何名称中包含安装,设置或更新的 EXE 都会弹出UAC,但是。UAC 提示控制台应用程序会失败 [#BUILDWIN322]_。 FPC 构建系统使用 GNU 安装(作为 ginstall.exe)文件需要有适当权限,并且由于 UAC失败。问题的定义也意味着解决方案: 1. 将 (g)install.exe 文件复制到一个没有关键字的新名称,我使用 myinst.exe #. 将 GINSTALL=myinst.exe 传递给命令行: ``make install GINSTALL=myinst.exe`` 附:通过添加清单,此 Vista/Windows 7 问题已在2.4.0中解决。 把它们放在一起 ^^^^^^^^^^^^^^^^^^^ 这是我在 Windows 上使用的批处理文件:(FPC源代码在 d:\repo\fpc) .. code-block:: bash :linenos: @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 中。请注意,所以变量都位于批处理文件中,这样可以通过调整路径轻松移植到其它系统中。有几台计算机和不同的路径是编写的原因。 不幸的是,纯批处理文件有限,不能在上面投入太多时间。 .. [#BUILDWIN321] http://wiki.freepascal.org/Size_Matters .. [#BUILDWIN322] http://technet2.microsoft.com/WindowsVista/en/library/00d04415-2b2f-422c-b70e-b18918c2811033.mspx 、http://technet2.microsoft.com/WindowsVista/en/library/00d04415-2b2f-422c-b70e-b18ff918c2811033.mspx 搜索关键字