openssl在windows上的编译方式很多人都了解,然而很多人因为习惯于windows的ide又很想知道如何在vs2005之类的ide中点击“生成”菜单项编译openssl,然后点击上面的那个绿色的小箭头调试或者单步跟踪,那是一件多么轻松的事情啊,要比在命令行上运行perl ... &ms/do_ms&nmke...轻松多了,遗憾的是,由于vs的ide和命令行的makefile并不是一个级别的,因此做这件事很不容易,或者说即使可做的话,你必须首先用perl...nmake系列命令去配置,如果不用的话,那么你的工作量可就大了,我首先分析一下要配置vs环境需要做什么:
1.准备头文件和源文件。这可不是一件简单的事情,因为vs2005默认编译所有加入项目的文件,比如在编译libeay32.dll的时候,如果你加入了不用编译的文件,那么由于依赖关系会出现一大堆莫名其妙的错误,之后你就需要一个一个的移除不该编译的文件,这个过程中如果你移除了别的文件依赖的文件,那么会更使得你头大。另外第2个步骤的未完成将使你彻底崩溃;
2.配置头文件。这个步骤非常重要,由于大多数开源代码都是跨平台的,而且都是基于unix传统开发的,所以很多代码提供了configure程序,当你运行它之后,最重要的事情也就做完了,它可以生成新的基于当前平台的头文件,或者基于当前平台定义一些宏,然后用新的头文件覆盖旧的头文件,这件事实际上是可以用上面的perl...do_ms脚本完成的,看看那些脚本就知道有多复杂了,现在你想自己手工完成这件事,如果你真得想,那就试试吧。
上面的两步完成了之后,你就可以点击“生成”和那个绿色的三角了,但是想想这值得吗?上面两步如果你手工完成的话,...你试试吧。前面说的一切的前提是你不想用perl..do_ms这种命令,如果你愿意使用,那么工作量可能简单一些,但是也有一些步骤要做:
1.进入openssl根目录;
2.运行 perl Configure VC-WIN32;
3.运行 ms/do_ms;
4.查看ms/ntdll.mak;
5.将所有$(CP) $(SRC_D)/./XXX.h $(INCL_D)/XXX.h执行一遍,你可以再写一个脚本,执行之;
6.创建vs2005空项目,注意,最好删除一切vs为你建立好的目录,那些目录对你没有任何用处。
7.将所有$(CC) /Fo$(OBJ_D)/YYY.obj $(APP_CFLAGS) -c $(SRC_D)/DIRDIR/YYY.c中的YYY.c添加到vs2005的工程,当然vc工程亦可,为了便于管理,最好用“筛选器”进行分类;
8.配置该项目属性,重点就是"c/c++中的'附加包含目录'",否则编译时会出现找不到头文件的错误,另外就是根据你是编译dll还是openssl或者apps中的程序设置配置是编译成dll还是编译成exe;
7.生成吧,保你成功;
总结:看了上面的步骤,我们发现,vs2005或者vc这一类的ide和make并不是并列关系,make实际上在之前的工作中已经帮你解决了编译过程和链接过程的依赖关系,而vs或者vc却需要你自己来进行依赖关系的配置,实际上vs也并不希望你用ide来完成编译开源代码的工作,一般而言,几乎所有的微软的代码都是直接在vs的基础上一个一个文件建立的,因此就没有了准备源文件的问题,再一个微软并不希望你用vs写出可以在linux上运行的代码,因此也就不需要配置源文件,所以微软的ide对于只编写微软平台的应用程序的程序员来讲是方便的,但是对于开源代码的编译,还是老老实实用make吧,如果你习惯了make那么你不会步习惯gdb的。make和微软的ide不在一个级别,configure和make解决了依赖关系,而微软的图形ide只是为了更好的编译和调试自己平台的代码,即使这样,微软也提供了命令行的程序。