webkit在win32下的编译规则(四)
关于VC预定义常量_WIN32,WIN32,_WIN64

VC2012 下写 Windows 时,有时需要判断编译环境。
在之前的文章《判断程序是否运行在 Windows x64 系统下。
》里说过如何在运行期间判断系统环境,但在编译时如何判断?MSDN 里说,VC 有 3 个预处理常量,分别是 _WIN32,_WIN64,WIN32。
这三个常量如何使用呢?看起来简单,其实是很困惑的。
在 Win32 配置下,WIN32 在“项目属性-C/C++-预处理器-预处理器定义”里声明了,而在 x64 配置下,这个常量并不在项目预定义列表中。
这是否说明可以根据 WIN32 来判断是否在 x64 平台呢?不。
在 Windows SDK 的minwindef.h 下第 37 行有如下定义:#ifndef WIN32#define WIN32#endif即是说,只要包含了 Windows.h,那么 WIN32 常量是肯定定义了的,所以不能用于判断平台环境。
但是如果在预处理定义里删掉 WIN32,又不包含Windows.h,那么 WIN32 未定义。
下面看 _WIN32 和 _WIN64,这两个比较特别,没有任何显式定义。
在Windows.h 里没有,在“项目属性-C/C++-预处理器-预处理器定义”下也没有。
根据 MSDN,这是由编译器(ml.exe/ml64.exe)内部定义的。
具体描述是_WIN32:Defined for applications for Win32 and Win64. Always defined._WIN64:Defined for applications for Win64.下面看一段程序:(分别在 Win32 和 x64 配置下运行一次)#include <iostream>using namespace std;int main() {#ifdef _WIN64cout << "_WIN64 is defined as " << _WIN64 << endl;#endif#ifdef _WIN32cout << "_WIN32 is defined as " << _WIN32 << endl;#endifcin.get();return 0;}在 Win32 配置下,_WIN32 有定义,_WIN64 没有定义。
Win32程序数据类型

Win32程序数据类型下面这些是和Win32程序共同使用的数据类型BOOL:布尔值,取值为TRUE or FALSEBSTR:32-bit 字符指针BYTE:8-bit整数,未带正负号COLORREF:32-bit数值,代表一个颜色值DWORD:32-bit整数,未带正负号LONG:32-bit整数,带正负号LPARAM:32-bit整数,作为窗口函数或callback函数的一个参数LPCSTR:32-bit指针,指向一个常数字符串LPSTR:32-bit指针,指向一个字符串LPCTSTR:32-bit指针,指向一个常数字符串,此字符串可以移植到Unicode和DBCSLPTSTR:32-bit指针,指向一个字符串,此字符串可以移植到Unicode和DBCSLPVOID:32-bit指针,指向一个未指定类型的数据LPRESULT:32-bit数值,作为窗口函数或callback函数的返回值UINT:在Win16中是一个16-bit 未带正负号整数,在Win32中是一个32-bit 未带正负号整数,WNDPROC:32-bit指针,指向一个窗口函数WORD:16-bit 整数,未带正负号WPARAM:窗口函数或callback函数的一个参数,在Win16中是16-bit,在Win32中是32-bit下面这些是MFC独特的数据类型POSITION:一个数值,代表collection对象(例如数组或链表)中的元素位置,常用于MFC collection classes(即数据处理类,如CArray)LPCRECT:32-bit指针,指向一个不变的RECT结构L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32为操作系统中,long指针和near指针及far修饰符都是为了兼容的作用。
没有实际意义。
P表示这是一个指针C表示是一个常量T在Win32环境中,有一个_T宏,这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
基于QT VS2010平台浏览器webkit编译运行配置流程讲解

基于QT平台浏览器webkit编译运行配置流程讲解1.源码的下载方式打开网页:/developer/downloads/qt/windows其中有:/download?target=http://wftp.tu-chemnitz.de/pub/Qt/qt/source/qt-wi n-opensource-src-4.4.0.zip下载该源码2.源代码configure配置执行完configure -debug再执行nmake然后打开根目录下的.sln文件,将browser 工程设为启动工程解压配置。
解压之后,目录里有个configure.exe 文件。
打开Microsoft Visual Studio 2005,点击菜单“工具--> Visual Studio 2005 Command Prompt”,出现Windows 命令行界面,进入解压后的qt 目录,执行一下configure 即可配置好并生成一些Microsoft Visual Studio 的工程文件。
如果你从VS2008创建了空项目然后添加c++代码,这样编译后就不会出现cmd窗口。
在VC Solution Explorer的项目名上,右键选择properties->Linker->System->SubSystem 选择Console (/SUBSYSTEM:CONSOLE)QT4.7:configure –debugconfigure -debug -webkit -platform win32-msvc2008QT4.8:configure.exe -debug -platform win32-msvc2010QT5.0.0编译QT5.0.1的错误“qtbase\\configure.exe' 不是内部或外部命令: 如在qt-everywhere-opensource-src-5.0.1目录下,可以运行命令:“echo foo > qtbase\.gitignore”。
Windows,linux下编译qt源码(比较简单)

同样编译qt程Biblioteka 需要更改qt版本,修改路径即可。./configure –prefix /opt/qtstatic –static –release -nomake examples --nomake demos -nomake docs -continue
4.待执行完之后执行make
5.makeinstall
编译qt程序需要在工程中添加该版本的qt库,然后到pro工程文件夹中目录下边的configure文件修改qt的路径为新编译qt版本,之后编译qt程 序。
博客园 用户登录 代码改变世界 密码登录 短信登录 忘记登录用户名 忘记密码 记住我 登录 第三方登录/注册 没有账户, 立即注册
Windows, linux下编译 qt源码(比较简单)
一、linux下静态编译qt源码
1.取到qt源码并解压到文件夹
2.cd到qt目录下
3.使用configure生成makefile
二、Windows下编译qt源码,用vs2010进行的编译
1.取到qt源码并解压到文件夹
2.运行vs2010命令行工具command,cd到qt目录下
3.执行命令configure -platform win32-msvc2010 -debug-and-release -fast -opensource -developer-build -confirm-license -nomake examples -nomake demos -nomake docs -nomake translations -no-openssl -webkit -no-qt3support
windows上webkit的编译过程

Webkit 开发环境的安装Developer Tools安装VS相关补丁和工具1.使用VS2005,以下所有安装指导都是基于VS2005,其他版本的VS不能保证可用性;使用WindowsXP或者Vista,推荐XP,其他系统不保证可行2.其次,装上Microsoft Visual Studio 2005 Team Suite Service Pack 1.3. 最后装上四个补丁,vs2005就算准备妥当了:KB918559KB935225KB943969KB9473154. 搞定vs2005后,您得装个Cygwin,Webkit官网提供了一个cygwin-downloader.zip供下载,解压以后,文件夹里面有一个cygwin-downloader.exe,点击运行它会自动下载119个软件包;下载完成后,点击Cygwin的安装程序选择从本地文件夹安装,把刚才下载的119个软件都装上即可5. 您还得去/quicktime/download/下载一个quicktime sdk,需要注册才能下载,耐心注册就是,下载安装没什么说的。
6. 安装DirectX SDKGet The Code1. 这一步甚为关键,您要是比着官网的导引,到这一步就该下载/files/WebKit-SVN-source.tar.bz2了,这玩意有两三百M大,Webkit官网到咱大陆局域网的速度又极慢,因此这一失足通常能浪费半天到一天的时间,您要是日理万机类型的人物,恐怕Webkit之旅就到此为止了。
实际上完全没有必要下载svn的压缩包(在这里不得不赞同linus,svn真是shit,大家有空还是多琢磨琢磨Git吧,WebKit最近已经开始使用Git 了),下载一个导出的纯代码的tarball就行了,这个网页/第三个下载项。
一般只有10M大小,刷刷的就下完了。
2. 在Windows下编译需要下载一个补丁包,WebKit Support Libraries。
自-Windows下Qt静态编译连接和DLL依赖问题解决

Windows下Qt静态编译连接和生成程序的mingwm10.dll、libgcc_s_dw2-1.dll依赖问题解决本文编写和程序配置调试:蔚蓝()一、官方Qt 库-MinGW版本(Qt Creator)静态编译和DLL依赖解决1、MinGW版本(1)MinGW官方版本(gcc-4.5.2)使用dwarf2异常处理,默认使用动态C运行时库,默认生成的程序依赖:libgcc_s_dw2-1.dll(105K)libstdc++-6.dll(860K)使用参数-static 可以解除对以上dll依赖。
现在新版MinGW生成的程序默认已经不依赖mingwm10.dll了。
(2)TDM-GCC版本(Codelite和CodeBlocks带的,gcc-4.4.1)使用sjlj异常处理,默认使用静态C运行时库,默认生成的程序独立运行,无dll依赖问题。
(3)MinGWDistro-nuwen.net最新版本(gcc 4.6.0)使用dwarf2异常处理,默认使用静态C运行时库,无DLL依赖问题。
(4)QP-GCC版本(gcc-4.4.5)使用dwarf2异常处理,默认使用静态C运行时库,无DLL依赖问题。
(5)PCX版本,包括32bit和64bit版本的MinGW(最新有gcc 4.6测试版)与(4)差不多,无DLL依赖问题。
(6)Qt库自带的MinGW(gcc-4.4.0)GCC配置信息:D:\Qt\2011qt>gcc -vUsing built-in specs.Target: mingw32Configuredwith: ../gcc-4.4.0/configure--enable-languages=c,ada,c++,fortran,java,objc,obj-c++--disable-sjlj-exceptions --enable-shared --enable-libgcj--enable-libgomp--with-dwarf2 --disable-win32-registry--enable-libstdcxx-debug--enable-version-specific-runtime-libs --prefix=/mingw--with-gmp=/mingw/src/gmp/root--with-mpfr=/mingw/src/mpfr/root--build=mingw32Thread model:win32gcc version 4.4.0 (GCC)Qt带的这个MinGW比较老,gcc-4.4.0版,使用dwarf2异常处理,默认使用动态C运行时库。
苹果版Webkit
苹果版Webkit(Safari)研究1.wegkit编译1) 获取WebKit 源代码WebKit 源代码是使用Subversion 工具做管理的。
因此,只要具备Subversion 客户端就可以从/repository/webkit/trunk 获取源代码。
但是,这并不是最好的方式。
在实际编译过程中通过svn拿下来的代码有可能为你带来许多的烦恼。
因此,我推荐从WebKit的Nightly build 直接下载WebKit 源代码压缩包。
具体地址是:/builds/trunk/src/1,本文采用的webkit版本是WebKit-r74228.tar.bz2,直接从网站上下载的。
2) WebKit 编译环境的搭建WebKit 网站有一篇文章说明了一下WebKit 在Windows 平台下的环境搭建:/building/tools.html 但这篇文章写得也太过简单了。
这也是WebKit 最最蹂躏人的地方。
我在历经十数次失败之后,终于找到了通往目标的捷径。
硬件方面内存最好找一台内存大于2G的计算机。
因为WebKit 项目太过庞大了,会生成数以百计的.obj 文件。
在执行链接操作时,内存会需要大概1.6G内存。
硬盘当然是越大越好,因为WebKit 源代码展开后需要占用160M-190M磁盘空间,编译过程产生的中间文件需要大约4G的存储空间。
外加上Cygwin Visual Studio 等占据的磁盘空间,这些还是挺大的。
最最重要的是系统盘最好预留出4G左右的空间。
软件方面首先你需要安装Visual Studio 2005 SP1 如果是Vista 或者Window 7 需要安装SP1 update for vista。
Visual C++ 2005 Express 也是可以编译WebKit的,但是需要单独安装Platform SDK。
实践证明WebKit 在Platform 5.0 6.0 上都可以编译通过。
PE文件规范(译文)
Microsoft可移植可执行文件和通用目标文件格式文件规范修订版8.1 - 2008年2月15日摘要本规范描述了Microsoft® Windows®操作系统家族下的可执行文件(映像)和目标文件的结构。
这些文件分别被称为可移植可执行(PE)文件和通用目标文件格式(COFF)文件。
注意:提供本文档是为了辅助开发用于Microsoft Windows操作系统上的工具和应用程序,但并不保证它在各个方面都是完整的规范。
Microsoft保留更改本文档而不通知的权利。
Microsoft可移植可执行文件和通用目标文件格式文件规范的此次修订版取代了本规范的6.0修订版。
本规范中的信息适用于以下操作系统:Windows Server® 2008Windows Vista®Windows Server 2003Windows XPWindows 2000本规范最后列出了参考信息和相关资源。
本规范的最新版在万维网的以下地址被维护:/whdc/system/platform/firmware/PECOFF.mspxSmartTech译电子信箱:zhzhtst@法律声明Microsoft可移植可执行文件和通用目标文件格式文件规范Microsoft Corporation修订版 8.1注意:提供本规范是为了辅助开发某些用于Microsoft Windows操作系统平台上的开发工具。
但是Microsoft并不保证它在各个方面都是完整的规范,也无法保证这里的所有信息在发布之后一直都是准确的。
Microsoft保留更改本规范而不通知的权利。
在合理的和非歧视性条款和条件下,Microsoft将针对任何Microsoft认为仅在面向Microsoft Windows的被称为编译器、链接器以及汇编程序的软件开发工具中实现和遵守本规范中所需部分这种有限用途下所需要的Microsoft权利要求书(如果存在)授予您免版税许可。
windows下静态编译qt5.9原码
一、编译前的准备1、下载qt并安装下载地址:http://download.qt.io/archive/qt/5.9/随便选择一个版本的下载安装,在安装时如果不确定需要使用到哪些插件;就完全安装。
2、安装Perl下载地址:/activeperl/下载时选择5.12或则更高的版本,安装时在添加环境变量的复选框上打钩3、安装Python下载地址:/activepython/下载时选择2.7或则更高的版本,安装时在添加环境变量的复选框上打钩4、安装Ruby下载地址:/下载时选择1.9.3或则更高的版本,安装时在添加环境变量的复选框上打钩5、添加qt的环境变量二、测试上述安装1、gcc –v查看qt的环境变量是否添加正确2、prel –v3、python –v如果上述都是正确的,就可以正式的进行qt源码的编译了三、编译过程1、更改qt安装目录下的qmake.conf文件;如我的qt的安装路径是C:\Qt\Qt5.9.1\5.9.1\;qmake.conf所在路径是C:\Qt\Qt5.9.1\5.9.1\mingw53_32\mkspecs\win32-g++;用记事本打开qmake.conf,将QMAKE_LFLAGS_DLL= - shared改为QMAKE_LFLAGS_DLL= - static;我自己在编译之前是做过修改的,但是我测试的时候通过静态编译的exe还是依赖libgcc_s_dw2-1.dll,libstdc++-6.dll,libwinpthread-1.dll这三个库;如果有兴趣的可以在qmake.conf这个文件中添加QMAKE_LFLAGS = -static试试。
ps(修改这两项的目的是我们编译的exe不在依赖libgcc_s_dw2-1.dll,libstdc++-6.dll,libwinpthread-1.dll这三个库)2、打开,上述的测试也在这里3、切换到qt的源码目录下;如我的qt的安装路径是C:\Qt\Qt5.9.1\5.9.1,命令行cd configure.bat -confirm-license -opensource -platform win32-g++ -mp -debug-and-release -static -prefix "C:\Qt\Qt5.9.1\5.9.1\mingw53_32_static" -sql-sqlite -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-freetype -no-qml-debug -no-angle -nomake tests -nomake examples -skip qt3d;黄色部分是我需要将编译好的qt安装的目录,可以改成你的路径下面是常见的使用选项说明:-debug-and-release 编译debug和release版-opensource 选择开源协议并确认-platform win32-g++ 使用mingw编译-prefix "D:\Qt4.8.6" 指定编译结果目录,如果未指定则默认当前-shared 创建和使用共享Qt库-static 创建和使用静态Qt库-nomake demos -nomake examples 不编译例程-nomake tests 不编译tests-skip qtwebkit 忽略qtwebkit,因为编译它特别消耗时间-mp 使用多核优化编译4、以上都没有错误时:mingw32-make –j2,-j2的意思是使用几核进行编译;如果的电脑的cpu的核书比较多,例如8核;后面的-j2可以换成-j8;编译是一个漫长的过程。
浏览器引擎介绍
一、排版引擎首先厘清一下浏览器内核是什么东西。
英文叫做:Rendering Engine,中文翻译很多,排版引擎、解释引擎、渲染引擎,现在流行称为浏览器内核,至于为什么流行这么称呼,就像你们称呼陈伟老师为c.k。
Rendering Engine,顾名思义,就是用来渲染网页内容的,将网页的内容和排版代码转换为可视的页面。
因为是排版,所以肯定会排版错位等问题。
为什么会排版错位呢?有的是由于网站本身编写不规范,有的是由于浏览器本身的渲染不标准。
现在有几个主流的排版引擎,因为这些排版引擎都有其代表的浏览器,所以常常会把排版引擎的名称和浏览器的名称混用,比如常的说IE内核、Chrome内核。
其实这样子是不太合理的,因为一个完整的浏览器不会只有一的排版引擎,还有自己的界面框架和其它的功能支撑,而排版引擎本身也不可能实现浏览器的所有功能。
下面罗列一下几款主流的排版引擎和浏览器。
1、Trident(Windows)IE浏览器所使用的内核,也是很多浏览器所使用的内核,通常被称为IE内核。
基于Trident 内核的浏览器非常多,这是因为Trident内核提供了丰富的调用接口。
老的Trident内核(比如常说的IE6内核)一直是不遵循W3C标准的,但是由于它的市场份额最大,所以后果就是大量的网站只支持老的Trident内核,依据W3C标准写的网页在老的Trident内核下面又出现偏差。
目前可供调用的最新版的Trident内核是IE9所用的内核,相较之前的版本对W3C标准的支持增强了很多。
Trident内核的浏览器:IE6、IE7、IE8(Trident 4.0)、IE9(Trident 5.0)、IE10(Trident 6.0);世界之窗1、世界之窗2、世界之窗3;360安全浏览器1、360安全浏览器2、360安全浏览器3、360安全浏览器4、360安全浏览器5;傲游1、傲游2;搜狗浏览器1;腾讯TT;阿云浏览器(早期版本)、百度浏览器(早期版本)、瑞星安全浏览器、Slim Browser;GreenBrowser、爱帆浏览器(12 之前版本)、115浏览器、155浏览器;闪游浏览器、N氧化碳浏览器、糖果浏览器、彩虹浏览器、瑞影浏览器、勇者无疆浏览器、114浏览器、蚂蚁浏览器、飞腾浏览器、速达浏览器、佐罗浏览器;2、Gecko(跨平台)Netscape6启用的内核,现在主要由Mozilla基金会进行维护,是开源的浏览器内核,目前最主流的Gecko内核浏览器是Mozilla Firefox,所以也常常称之为火狐内核。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
webkit在win32下的编译规则(四)分类:浏览器浏览器2011-03-01 12:31 593人阅读评论(0) 收藏举报接下来看JavaScriptCore这个工程,这个工程继承的project property sheet如下:../../../../WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops../../../../WebKitLibraries/win/tools/vsprops/common.vsprops../../../../WebKitLibraries/win/tools/vsprops/debug.vsprops../../../../WebKitLibraries/win/tools/vsprops/debug_wincairo.vsprops./JavaScriptCoreCommon.vsprops./JavaScriptCoreCFLite.vsprops上面的前面4个与WTF工程一样,就不介绍了。
JavaScriptCoreCommon.vsprops主要用于设置javascriptcore依赖的头文件目录和库文件,文件内容如下:xml version="1.0"encoding="Windows-1252"?> <VisualStudioPropertySheet ProjectType="Visu alC++" Version="8.00" Name="JavaScriptCoreCommon" > <Tool Name="VCCLComp ilerTool"AdditionalIncludeDirectories=""$(ConfigurationBuildDir)/obj/ JavaScriptCore/DerivedSources/";../../;../../API/;../../parser/;../.. /bytecompiler/;../../jit/;../../runtime/;../../bytecode/;../../interp reter/;../../wtf/;../../profiler;../../assembler/;../../debugger/;../ ../collector/handles/;"$(WebKitLibrariesDir)/include";"$(WebKitLibrar iesDir)/include/private";"$(ConfigurationBuildDir)/include";"$(Config urationBuildDir)/include/JavaScriptCore";"$(ConfigurationBuildDir)/in clude/private";"$(WebKitLibrariesDir)/include/pthreads"" Preprocessor Definitions="__STD_C" ForcedIncludeFiles="ICUVersion.h" /><Tool Name= "VCLinkerTool" AdditionalDependencies="gdi32.lib oleaut32.lib winmm.lib libicuin$(LibraryConfigSuffix).liblibicuuc$(LibraryConfigSuffix).libpthreadVC2$(LibraryConfigSuffix).libWTF$(WebKitConfigSuffix).lib"OutputFile="$(OutDir)/$(ProjectName)$(We bKitDLLConfigSuffix).dll"AdditionalLibraryDirectories=""$(IntDir)/lib ""ModuleDefinitionFile="JavaScriptCore.def" /> VisualStudioPropertySh eet>JavaScriptCoreCFLite.vsprops用于设置CFLite库:xml version="1.0"encoding="Windows-1252"?> <VisualStudioPropertySheet ProjectType="Visu alC++" Version="8.00" Name="JavaScriptCoreCFLite" > <Tool Name="VCLinker Tool" AdditionalDependencies="CFLite$(WebKitConfigSuffix).lib" />Visu alStudioPropertySheet>CFlite是Apple 的基础组件,苹果开源了Core Foundation的部分内容,可以到/source/下载。
但webkit依赖的cflite苹果并没有公开全,不过网上有开源版本OpenCFLite(/projects/opencflite/)。
还有另外一个版本,请参考:/read.php?507。
JavaScriptCore这个工程的pre-build event脚本如下:REM Do not edit from the Visual Studio IDE! Customize via a $(ProjectName)PreBuild.cmd file. if not exist"$(ProjectDir)$(ProjectName)PreBuild.cmd" exit /b set CONFIGURATIONBUI LDDIR=$(ConfigurationBuildDir) set CONFIGURATIONNAME=$(ConfigurationNa me) set INPUTDIR=$(InputDir) set INPUTFILENAME=$(InputFileName) set IN PUTPATH=$(InputPath) set INTDIR=$(IntDir) set LIBRARYCONFIGSUFFIX=$(Li braryConfigSuffix) set OUTDIR=$(OutDir) set PLATFORMNAME=$(PlatformNam e) set PROJECTDIR=$(ProjectDir) set PROJECTFILENAME=$(ProjectFileName) set PROJECTNAME=$(ProjectName) set PROJECTPATH=$(ProjectPath) set SOL UTIONDIR=$(SolutionDir) set SOLUTIONFILENAME=$(SolutionFileName) set S OLUTIONNAME=$(SolutionName) set SOLUTIONPATH=$(SolutionPath) set TARGE TDIR=$(TargetDir) set TARGETEXT=$(TargetExt) set TARGETFILENAME=$(Targ etFileName) set TARGETPATH=$(TargetPath) set WEBKITCONFIGSUFFIX=$(WebK itConfigSuffix) set WEBKITDLLCONFIGSUFFIX=$(WebKitDLLConfigSuffix) REM If any of the above variables didn't existpreviously and REM were set to an empty string, set will set the errorlevel to 1, REM which will cause the project-specific script to think the build REM has failed. This cmd /c call will clear the errorlevel. cmd /c "$(ProjectDir)$(ProjectName)PreBuild.cmd"主要是调用JavaScriptCorePreBuild.cmd这个文件,JavaScriptCorePreBuild.cmd这个文件内容如下:%SystemDrive%/cygwin/bin/which.exe bash if errorlevel1 set PATH=%SystemDrive%/cygwin/bin;%PATH% cmd /c if exist"%CONFIGURATIONBUILDDIR%/buildfailed" grep XX%PROJECTNAME%XX"%CONFIGURATIONBUILDDIR%/buildfailed" if errorlevel 1 exit 1 echo XX%PROJECTNAME%XX > "%CONFIGURATIONBUILDDIR%/buildfailed" bash"%WEBKITLIBRARIESDIR%/tools/scripts/auto-version.sh" "%INTDIR%"从上面的代码可以看出,JavaScriptCorePreBuild.cmd这个脚本的作用主要是调用auto-version.sh生成版本信息的头文件,前面已经介绍,这里就不再描述了。
在编译JavaScriptCore这个工程时,cl.exe所使用的参数展开后如下:/Od /I "C:/cygwin/home/xufan/WebKit/WebKitBuild/Debug_Cairo_CFLite/obj/JavaScriptCore/DerivedSources//" /I "../../" /I "../../API/" /I "../../parser/" /I"../../bytecompiler/" /I "../../jit/" /I "../../runtime/" /I "../../bytecode/" /I "../../interpreter/" /I "../../wtf/" /I "../../profiler" /I "../../assembler/" /I "../../debugger/" /I"../../collector/handles/" /I "C:/cygwin/home/xufan/WebKit/WebKitLibraries/win/include" /I "C:/cygwin/home/xufan/WebKit/WebKitLibraries/win/include/private" /I "C:/cygwin/home/xufan/WebKit/WebKitBuild/Debug_Cairo_CFLite/include" /I"C:/cygwin/home/xufan/WebKit/WebKitBuild/Debug_Cairo_CFLite/include/JavaScriptCore" /I"C:/cygwin/home/xufan/WebKit/WebKitBuild/Debug_Cairo_CFLite/include/private" /I "C:/cygwin/home/xufan/WebKit/WebKitLibraries/win/include/pthreads" /I "C:/cygwin/home/xufan/WebKit/WebKitLibraries/win/include/cairo" /D "__STD_C" /D "WIN32" /D "_WINDOWS" /D "WINVER=0x502" /D"_WIN32_WINNT=0x502" /D "_WIN32_IE=0x603" /D "_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1" /D "__PRODUCTION__=0" /D"_HAS_EXCEPTIONS=0" /D "BUILDING_JavaScriptCore" /D "ENABLE_CHANNEL_MESSAGING" /D "ENABLE_DATABASE" /D "ENABLE_DATALIST" /D"ENABLE_DOM_STORAGE" /D "ENABLE_EVENTSOURCE" /D "ENABLE_FILTERS" /D "ENABLE_ICONDATABASE" /D"ENABLE_JAVASCRIPT_DEBUGGER" /D "ENABLE_METER_TAG" /D "ENABLE_OFFLINE_WEB_APPLICATIONS" /D "ENABLE_SHARED_WORKERS"/D "ENABLE_SVG" /D "ENABLE_SVG_ANIMATION" /D "ENABLE_SVG_AS_IMAGE" /D "ENABLE_SVG_FONTS" /D "ENABLE_SVG_FOREIGN_OBJECT"/D "ENABLE_SVG_USE" /D "ENABLE_WEB_SOCKETS" /D "ENABLE_WORKERS" /D "ENABLE_XPATH" /D "ENABLE_XSLT" /D "_WINDLL" /D"_UNICODE" /D "UNICODE" /Gm /RTC1 /MTd /GR- /Fo"C:/cygwin/home/xufan/WebKit/WebKitBuild/Debug_Cairo_CFLite/obj/JavaScriptCore//"/Fd"C:/cygwin/home/xufan/WebKit/WebKitBuild/Debug_Cairo_CFLite/obj/JavaScriptCore/vc80.pdb" /W4 /nologo /c /Zi /TP /wd4018 /wd4068 /wd4099/wd4100 /wd4127 /wd4138 /wd4180 /wd4189 /wd4201 /wd4244 /wd4251 /wd4275 /wd4288 /wd4291 /wd4305 /wd4344 /wd4355 /wd4389 /wd4503 /wd4505/wd4510 /wd4512 /wd4610 /wd4706 /wd4800 /wd4951 /wd4952 /wd4996 /wd6011 /wd6031 /wd6211 /wd6246 /wd6255 /wd6387 /FI "ICUVersion.h"/errorReport:prompt /GS里面的类似于/D "ENABLE_SVG"的宏定义就是用于开启webkit的相关特性的,在cpp里面的一般用这种写法来判断是否开启:#if ENABLE(SVG) #include "XLinkNames.h" #include "SVGNames.h" #endif类似ENABLE的还有USE,PLATFORM,HAVE等,这些宏的定义在D:/tools/cygwin/home/xufan/WebKit/Source/JavaScriptCore/wtf/Platform.h 里面定义:/* ==== PLATFORM handles OS, operating environment, graphics API, and CPU. This macro will be phased out in favor of platform adaptation macros, policy decision macros, and top-level port definitions. ==== */ #define PLATFORM(WTF_FEATURE) (defined WTF_PLATFORM_##WTF_FEATURE &&WTF_PLATFORM_##WTF_FEATURE) /* ==== Platform adaptation macros: these describe properties of the target environment. ==== *//* COMPILER() - the compiler being used to build the project */ #defineCOMPILER(WTF_FEATURE) (defined WTF_COMPILER_##WTF_FEATURE &&WTF_COMPILER_##WTF_FEATURE) /* CPU() - the target CPU architecture*/ #define CPU(WTF_FEATURE) (defined WTF_CPU_##WTF_FEATURE &&WTF_CPU_##WTF_FEATURE) /* HAVE() - specific system features (headers, functions or similar) that are present or not */ #define HAVE(WTF_FEATURE) (defined HAVE_##WTF_FEATURE && HAVE_##WTF_FEATURE) /* OS() - underlying operating system; only to be used for mandated low-level services like virtual memory, not to choose a GUI toolkit */ #define OS(WTF_FEATURE) (defined WTF_OS_##WTF_FEATURE && WTF_OS_##WTF_FEATURE) /* ==== Policy decision macros: these define policy choices for a particular port. ==== *//* USE() - use a particular third-party library or optional OS service */ #define USE(WTF_FEATURE) (defined WTF_USE_##WTF_FEATURE &&WTF_USE_##WTF_FEATURE) /* ENABLE() - turn on a specific feature of WebKit */ #define ENABLE(WTF_FEATURE) (defined ENABLE_##WTF_FEATURE && ENABLE_##WTF_FEATURE)Platform.h还定义了其他很多跟平台相关的宏,这些宏在移植webkit到其他平台(例如arm)时要特别注意。