阅读提示:
本文已过时。
fishie 是一个基于 Kittie.Concept 的远程编译平台。它可以在 Windows 机器上远程调用 Linux 机器上的编译器编译指定工程,并把编译结果返回 Windows 机器。由于 fishie 是一个基于命令行的程序,因此它可以嵌入目前任何一个主流的集成开发环境中工作。目前 fishie 将 gcc 返回的错误信息格式调整为 VC7 格式,因此在 VC7 下使用 fishie 编译出错时可以直接双击跳转到出错行。
fishie 是 Kittie.Concept for Win32 MinGW 套装中的组件,你可以在这里下载到 Kittie for Win32 MinGW 套装。如果你仅需要使用远程编译功能,不需要使用 MinGW 编译 Windows 程序,你可以不安装 MinGW。
fishie 嵌入 Visual Studio .NET 2003 的工作截屏如下:
要进行远程编译,我们要完成三项任务。
首先,我们需要将待编译的项目文件上传到 Linux 服务器上。kittie 能够将 VC7 工程中使用到的所有文件名列表导出为一个文本文件,便于其它程序进行处理。fishie 获得 kittie 导出的文件列表后,根据时间戳判断需要上传的文件,并使用指定的协议上传。
其次,将 Windows 工程文件转换为 Linux 工程文件。kittie 是一个支持多种文件格式的工程文件转换程序,我们使用 kittie 将 VC7 下的工程文件转换为 Linux 下的 Makefile,为编译做好准备。
然后,第三项任务是进行编译,并将编译过程与输出实时反馈到客户计算机上。fishie 使用指定协议连接远程计算机,获取编译结果,并将 gcc 的输出格式调整为 VC7 IDE 能够直接识别的格式,使 VC7 能够使用“双击跳转到出错行”的功能,方便了不熟悉 Linux 的程序员进行 Linux 下的开发。
Windows 下需要安装 Kittie.Concept for Win32 MinGW 套装。顺便安装一份 MinGW 更好,但这不是必须的。Linux 下需要安装 Kittie.Concept for Linux。安装步骤请参看安装包内的说明书。
要使用 fishie,首先创建一个 fishie 指令文件 PROJECT,文件格式如下:
目前上传文件支持的协议有 ftp、file 两种。
FTP 需要的选项有两个:Server 和 Path。Server 配置项中指定了服务器的地址、用户名、密码与端口号,Path 指定上传文件所在的目录名。
File 协议用于使用 Samba 上传文件,上传之前需要将 Linux 机器下的一个目录映射为 Windows 下的网络硬盘。File 协议需要的选项有一个:Path,Path 指定上传文件所到的目录名对应的 Windows 网络磁盘路径。
目前远程编译工程支持的协议有 ssh 一种。
SSH 需要的选项有两个:Server 和 Path。Server 配置项中制定了服务器的地址、用户名与端口号,Path 指定待编译文件所在的目录名。
从上文可以看出,远程编译时并没有提供密码配置项,而程序运行时也不会弹出界面让用户输入密码,因此为了能够正常使用 ssh 远程编译,需要将本地计算机设置为远程计算机的信任主机,以便不输入密码进行连接和编译。关于 ssh 自动登录的使用,请参看这里。
首先,我们需要生成一个公钥、私钥对。打开 MinGW
控制台,输入“ssh-keygen -t rsa
”,然后一路回车,就能够生成一对公钥、私钥对。生成的公钥、私钥对存放在
%HOME%\.ssh
下,公钥叫 id_rsa.pub,私钥叫 id_rsa。
在使用 fishie 之前,请至少使用 ssh 登录目的服务器一次,将服务器加入到本机的 known_hosts 列表中,以便其后正常使用。如果登录时没有提示输入密码,说明配置 SSH 信任成功。
fishie 在编译时会自动将 vcproj 导出为 kmk 格式,文件名为同名的 .vc 文件,如果你在编写 kmk 文件的时候想复用已有的 vcproj 工程文件,你可以在你的 kmk 中包含 VC 导出的 .vc 文件,然后根据需要修改配置。
以下是一个 kmk 工程文件补丁的例子:
正确配置了 PROJECT 文件后,并编写了相应的 kmk
补丁后,就可以进行远程编译了。远程编译的命令行与本地编译类似,只需要将所有
kittiemake
替换为 fishie
就可以了,例如:
在 VS 2003 中创建“生成文件”配置项,并在编译的命令行中调用 fishie 进行编译即可。
对于 Debug 配置,“生成”使用的命令行如下:
“全部重新生成”使用的命令行如下:
“清除”使用的命令行如下:
对于 Release 配置,只要把上面命令行中的所有 Debug 替换为 Release 就可以了。
fishie 将 gcc 的输出格式进行了调整,使 VS 2003 能够直接识别,因此在编译出错的时候可以直接双击跳转到出错行。
Kittie.Concept 目前不支持 VC6 的工程文件,所以暂时还只能嵌入 Visual Studio 2003 使用。VC6 的工程文件描述能力比较低下,作者暂时没有打算支持它的意图。当然如果有足够的需求的话,也许能够让作者改变主意。
由于 Kittie.Concept 使用 VC 工程文件来生成 Makefile,因此如果你往当前工程中添加或删除了文件,或是修改了项目设置的时候,请单击“保存全部”将工程文件也保存到硬盘上,否则可能会导致远程的 Makefile 与 VC 中的工程不同步。
远程编译只是 Kittie.Concept 的一项功能,远程调试也不是 Kittie.Concept 的职责。作者有意向开发能够嵌入 Visual Studio 的远程调试工具,但短期内不可能取得成效,请大家不要抱太大希望。