how to build winSCP5.5.6

来源:互联网 发布:阿里云code如何使用 编辑:程序博客网 时间:2024/05/08 09:32

前言

尝试编译打包winSCP, 先看看能不能编译过,打包过.
拿winSCPV5.56来试验.
开源工程的编译不好玩, 好繁琐.
中间还有坑, 有的编译错误连作者都解决不了. 应该都是编译环境的问题.
作者能开源就很不错了.
让我猜,作者可能没有在干净的计算机上自己搭一次编译环境和打包环境走完整流程, 让用他工程的人心碎啊.

试验材料下载点

winscp_stuff.zip

记录

最大的坑在于作者给的XE2的MFC库文件的修改过程不对.
他也能将MFC的实现给改了, 也不搞个子类, 看醉了.
一个说明readme_mfc.txt, 照着改了,编译不过. 最后在github上找了一份其他程序员改的5.8版本的MFC版本可以编译过, 这多大的坑啊.

编译时, 需要的编译环境:
* XE2(我将delphi和c++builer都装上了)
* NASM
* vs2012 or vs2013
* DotNet3.5
* DotNet4.0

XE2命令行

安装了XE2后, 在cmd.exe中运行rsvars.bat(“D:\Program Files (x86)\Embarcadero\RAD Studio\9.0\bin\rsvars.bat”)

编译XE2专用的MFC库

WinSCP作者自己修改了MFC头和库.
D:\Program Files (x86)\Embarcadero\RAD Studio\9.0\lib下要放WinSCP自带的MFC头和库.

MFC库编译步骤

BDS环境变量是XE2的安装目录.
运行了rsvars.bat, 输入 set BDS 可以看到环境变量的值.

1) copy winscp\libs\mfc\source to $(BDS)\source\mfc

2) copy winscp\libs\mfc\include to $(BDS)\include\mfc

3) compile the mfc library using the command:
make -fborland.mak NO_WARNINGS=1
(warnings about missing object in library are ok, for the first build)

4) compile the debug mfc library using the command:
make -fborland.mak NO_WARNINGS=1 -DDEBUG

编译完后, MFC库在目录 : D:\Program Files (x86)\Embarcadero\RAD Studio\9.0\lib
release版为 UafxcW.lib
debug版为 UafxcWD.lib

用XE2命令行编译一遍

新建了一个脚本 \winscp\doc\winscp556source\myBuild.bat, 先编译一遍工程

echo off
rem myBuild.bat
cls
echo start building winSCP project…
call rsvars.bat
%~dp0build.bat
pause
echo on

用XE2IDE手工编译一遍工程

作者的本意是, 用build.bat就可以编译成功WinSCP, 但是不能. 估计还是脚本没写好, 或工程配置没搞好.
Moje.cbproj和WinSCP.cbproj在build.bat下编译不过.

编译都能过, 工程中的有几个.bpl打不开, 看不到form, 不过不影响修改工程
在工程配置中,Component => Install Package, 将工程中的.bpl都加进来(可以看到部分form)

用XE2打开WinSCP.groupproj, 从上到下逐个编译, 最后生成WinSCP.exe和DragExt.dll

用XE2IDE中调试

在WinSCP中下断点(F5), 单步(F8, F7).
在单步之前, 在配置中载入需要Debug的编译好的WinSCP.exe

打包

安装 putty-64bit-0.68-installer.msi
安装 innosetup-5.5.9-unicode.exe
运行winscpsetup.iss

修改编译脚本通不过的地方:

; VersionInfoVersion={#Major}.{#Minor}.{#Rev}.{#Build}
VersionInfoVersion=1.0.0.1

将要打包的文件放到winscp556source\deployment..\source\Release\目录中, 就是winscp556source\source\release目录
WinSCP.exe和DragExt.dll, WinSCPnet.dll, …
缺啥就从编译完的工程中找来啥.

如果PuTTY安装的路径和配置文件中不同, 在安装脚本中改下路径

ifndef PuttySourceDir

#define PuttySourceDir “d:\Program Files\PuTTY”

endif

PuttySourceDir 改下, 编译完后, D:\Debug或D:\Release目录中有D:\Debug\PuTTY

可能是Inno Setup Compiler的版本问题, 导致安装工程编译不过(有些关键字不识别), 再试验吧. 看看哪个Inno版本可以.

备注

编译一个开源工程, 还要学学c++builder和Inno, 想想都麻烦.
用了一下c++builder的IDE, 确实做的挺好的. e.g. IDE自带80列的列宽指示.
为啥作者不用vs和Installsheild呢?
不过好多开源的软件都不用vs, 心碎啊.

0 0
原创粉丝点击