how to build winSCP5.7.7

前言

前几天做了一个winSCP的修改任务.
第一步选择和编译一个合适的winSCP版本,费了好几天时间.
winSCP作者不断的更新编译环境,搞不懂作者为啥要这样.
最新的winSCP是5.9~5.10, 用的是XE6和vs2015.
我已经下载了XE6, 手头有vs2013, 决定向下找一个版本, 能用vs2013+XE6编译的版本.
vs2015真是不想下载了, 这作者太讨厌了. 难道换了IDE,软件性能就有提高?
最后找到的版本是winSCP5.7.7.
因为对c++builder不熟, 从开始编译到能编译过,用了好几天.
中间遇到了一些坑, 原因我是c++builder新手.
等编译过了,剩下的问题就容易了,都是c++和windows编程.

记录

下载点

download from sourceforge : winSCP5.7.7

编译

编译前的拷贝

作者修改了MFC实现,这个版本做的可以,不用按照说明, 自己一步一步修改了.
作者已经修改好了, 只需要拷贝到XE6目录下就可以.
拷贝说明见源码包内的readme_mfc.txt

  1. copy libs\mfc\source to $(BDS)\source\mfc
del "D:\Program Files (x86)\Embarcadero\Studio\14.0\source\mfc\*.*" /S /Q
RD /S /Q "D:\Program Files (x86)\Embarcadero\Studio\14.0\source\mfc"
MD "D:\Program Files (x86)\Embarcadero\Studio\14.0\source\mfc"
xcopy /E /Y /J "F:\winscp577\libs\mfc\source" "D:\Program Files (x86)\Embarcadero\Studio\14.0\source\mfc"
  1. copy libs\mfc\include to $(BDS)\include\mfc
del "D:\Program Files (x86)\Embarcadero\Studio\14.0\include\mfc\*.*" /S /Q
RD /S /Q "D:\Program Files (x86)\Embarcadero\Studio\14.0\include\mfc"
MD "D:\Program Files (x86)\Embarcadero\Studio\14.0\include\mfc"
xcopy /E /Y /J "F:\winscp577\libs\mfc\include" "D:\Program Files (x86)\Embarcadero\Studio\14.0\include\mfc"

运行XE6环境命令行

做了一个脚本xe6env.bat, 打开cmd.exe运行

echo off
cls
echo set XE6 env
call "D:\Program Files (x86)\Embarcadero\Studio\14.0\bin\rsvars.bat"
echo on

编译XE6的MFC库

在运行了xe6env.bat的cmd.exe中, 进入到XE6的MFC目录, 运行下面的命令编译MFC库
编译完后, 在"D:\Program Files (x86)\Embarcadero\Studio\14.0\lib"下有UafxcW*.lib

release版MFC库

	cd "D:\Program Files (x86)\Embarcadero\Studio\14.0\source\mfc"
	del /S /Q "D:\Program Files (x86)\Embarcadero\Studio\14.0\lib\UafxcW*.*"
   make -fborland.mak NO_WARNINGS=1

debug版MFC库

make -fborland.mak NO_WARNINGS=1 -DDEBUG

编译第三方库

在winscp源码目录下有build.bat, 运行一下.
这一次不能全部编译过,不要理会,这应该是作者的失误(说好的一键编译呢).

2019-0227

我错怪作者了,正好今天给同事在新环境中搭建winscp开发环境(用的vs2013 + xe6), 运行build.bat. 一次编译通过。

我知道为啥我以前做实验运行build.bat编译不过了。查了svn, 我当时用的vs2013 + xe2…

vs2013IDE中编译

将工程输出全部改成统一的目录. e.g. d:\Debug
这步很重要.
how to build winSCP5.7.7_第1张图片
编译WinSCPnet.csproj

C#的工程, 装vs2013装全了, 就可以编译通过.

XE6IDE中编译

D:\tools\ftp\winscp\winscp577\source\中的工程,都是XE6工程.
打开C++Builder XE6, 将WinSCP.groupproj拖进去.
这步很重要, 如果双击打开WinSCP.groupproj, 编译不过的.

将每个工程都输出目录和库目录都改成d:\debug.
防止注册包时失败.
原工程使用环境变量定的输出目录和库目录,被折腾的不行了,直接改成绝对路径.
how to build winSCP5.7.7_第2张图片

有个编译顺序和注册包的问题.
在编译winSCP.exe之前, 要先编译其他工程并注册包.
编译顺序如下:
how to build winSCP5.7.7_第3张图片
如果putty.lib编译不过, 要去网上下载putty的安装程序, 安装完了, 按照错误提示, 缺啥补啥.

注册bpl包

x.bpl工程编译通过后, 在d:\debug下生成了*.bpl文件.
在XE6IDE中注册这些包给winSCP.exe用.
how to build winSCP5.7.7_第4张图片
bpl包注册成功后, 在XE6IDE中可以看到bpl工程图标上都有一个紫色的小虫子, 说明是和UI相关的bpl.
how to build winSCP5.7.7_第5张图片

编译主程序

在上面的bpl工程编译成功后, 包注册完成后, WinSCP.exe, Console.exe, DragExt.dll一次就编译过了.

打包工程的编译

winSCP打包时, 用到了innoSetup.
infoSetup下载点 : innosetup-5.5.9.zip
打包用的文件列表
2017/03/24 16:03 2,380,880 innosetup-5.5.9-unicode.exe
2017/03/28 15:42 2,015,795 ISSkin.7z
2017/03/28 15:42 2,578,308 ISSkinEx3.0.0.2 for InnoSetup and NSIS.exe.7z
2017/03/28 15:45 7,582,742 ISStudio 2.2.1.31.7z
安装完innosetup-5.5.9-unicode.exe, 再安装ISStudio 2.2.1.31.7z.
用ISStudio打开\winscp577\deployment\winscpsetup.iss.
开始打包脚本的编译.
这个打包脚本我没改,有个打包用文件的位置问题,提示缺哪个文件,就在提示出错的目录中补一个文件. 最后编译出winSCP的安装文件.

备注

这个开源工程的作者太不友好了, 到底还有没有诚心给大家用源码啊.

  • 既然准备了build.bat, 那说好的一键编译通过呢?
  • 既然准备了readme.txt, 那编译工程的顺序,如何注册bpl也一并说明不好么? 看他主页上也没有详细说明, 看帖子, 发现有人遇到了编译不过的问题, 他回答了半天, 最后也解决不了. 说到底,还是编译环境乱的原因. 如果编译环境统一, 不更新编译环境, 编译问题能有多少呢?
  • 为啥版本更新了, 就要换IDE? 新IDE好在哪里呢?
  • winSCP中的窗体打不开, 作者站点上有人也问这个问题, 他就说是包注册问题. 其实包注册全了, winSCP工程中的窗体设计也打不开. 太讨厌了. 程序编译过, 如果要改UI上的内容, 就麻烦些, 需要自己去猜测, 而不是所见即所得.
  • 综上所叙, 作者太不严谨了. 自己发布的工程, 都不知道在一个绝对干净的环境下走一遍流程(安装, 编译, 安装这个流程修正readme中的编译步骤), 看看使用者能用的舒服, 编译的通过, 是不是所有编译过程都和自己装全环境的开发机一样? 工程源码都发布出来了, 不让大家舒服的编译过, 这能说的过去么?

<2017-04-18>

必须编译成release版,只有这个配置才是正确的。
否则会有bug. e.g. sftp好使, ftp崩溃.

你可能感兴趣的:(工程的编译,winscp)