前几天做了一个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
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"
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"
做了一个脚本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
在运行了xe6env.bat的cmd.exe中, 进入到XE6的MFC目录, 运行下面的命令编译MFC库
编译完后, 在"D:\Program Files (x86)\Embarcadero\Studio\14.0\lib"下有UafxcW*.lib
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
make -fborland.mak NO_WARNINGS=1 -DDEBUG
在winscp源码目录下有build.bat, 运行一下.
这一次不能全部编译过,不要理会,这应该是作者的失误(说好的一键编译呢).
我错怪作者了,正好今天给同事在新环境中搭建winscp开发环境(用的vs2013 + xe6), 运行build.bat. 一次编译通过。
我知道为啥我以前做实验运行build.bat编译不过了。查了svn, 我当时用的vs2013 + xe2…
C#的工程, 装vs2013装全了, 就可以编译通过.
D:\tools\ftp\winscp\winscp577\source\中的工程,都是XE6工程.
打开C++Builder XE6, 将WinSCP.groupproj拖进去.
这步很重要, 如果双击打开WinSCP.groupproj, 编译不过的.
将每个工程都输出目录和库目录都改成d:\debug.
防止注册包时失败.
原工程使用环境变量定的输出目录和库目录,被折腾的不行了,直接改成绝对路径.
有个编译顺序和注册包的问题.
在编译winSCP.exe之前, 要先编译其他工程并注册包.
编译顺序如下:
如果putty.lib编译不过, 要去网上下载putty的安装程序, 安装完了, 按照错误提示, 缺啥补啥.
x.bpl工程编译通过后, 在d:\debug下生成了*.bpl文件.
在XE6IDE中注册这些包给winSCP.exe用.
bpl包注册成功后, 在XE6IDE中可以看到bpl工程图标上都有一个紫色的小虫子, 说明是和UI相关的bpl.
在上面的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的安装文件.
这个开源工程的作者太不友好了, 到底还有没有诚心给大家用源码啊.
必须编译成release版,只有这个配置才是正确的。
否则会有bug. e.g. sftp好使, ftp崩溃.