WebKit浏览器编译——开启宏定义
例如:VIDEO
代码中已经对VIDEO做了一定的支持,但默认情况下并没有开启,这些支持都在一个ENABLE_VIDEO的宏定义中括起来了,可以grep下源代码看下有很多ENABLE(VIDEO)括起来的代码。
代码中需要的宏
这个ENABLE的宏定义在Source/JavaScriptCore/wtf/Platform.h中被定义的,#define ENABLE(WTF_FEATURE) (defined ENABLE_##WTF_FEATURE && ENABLE_##WTF_FEATURE)
由以上ENABLE(VIDEO)对应的宏定义就是ENABLE_VIDEO
注意这里的##是C语言宏的连接符,即把ENABLE_与WTF_FEATURE(传入的是WML)的内容连接起来,这样就连接成了ENABLE_WML。
这样#if ENABLE(VIDEO) 会被预处理成 #if (defined ENABLE_VIDEO && ENABLE_VIDEO)
由此可见,我们首先要做的就是开启这个ENABLE_VIDEO宏定义。
编译环境中变量定义:
在 GtkWebkit-2.2.2 源码包中不含有 makefile ,由 configure 生成,所以配置都在 configure 时完成,
例如:#if ENABLE(VIDEO) && USE(GSTREAMER)
方法一:
1、ENABLE(VIDEO) 打开宏 ./configure --enable-video
2、USE(GSTREAMER) 在 configure 中不能直接找到配置开关,但 configure 文件中有条件控制
if test "$enable_video" = "yes" || test "$enable_web_audio" = "yes"; then
$as_echo "#define WTF_USE_GSTREAMER 1" >>confdefs.h
fi
所以在 configure 时候同时打开 --enable_web_audio 开关就 OK
方法二:(猜测,但试验好使)
宏在 configure 时候确认是否打开,宏的关闭保存在 WebKitFeatures.h(ENABLE) 和 autotoolsconfig.h(USE) 两个 .h 文件中,直接修改该 .h 文件开控制宏
课外补充(Android):
在external/webkit/Android.mk中加入下面代码开启宏的设置,我们需要让他的值为true,这里的含义是,如果ENABLE_WML环境值没有被定义过,则我们定义它为true。
ifeq ($(ENABLE_WML), )
ENABLE_WML := true
endif
在编译脚本中定义代码中的宏
但是经过上述的内容,只是定义了编译环境里的变量,代码中的宏定义还没有被定义的,那么需要主动来设置下宏定义了,通过下面的方式
ifeq ($(ENABLE_WML), true)
LOCAL_CFLAGS += -DENABLE_WML=1
endif
这里的-D编译选项是用来定义代码中的宏的,即设置c/c++中的DENABLE_WML宏的值为1。就相当于代码中的#define ENABLE_WML 1
通过上述两步,c/c++的宏被成功的定义了。
另外说下Source/JavaScriptCore/wtf/Platform.h这里有很多#defineENABLE_XXX的宏,这里可以修改一些宏的值来修改配置。
总结下上述的过程。有一个编译的环境变量叫ENABLE_WML,(你也可以命名为其他的名字),在判断这个环境变量如果没有被定义的话,那么在该脚本中定义它的值为true。
然后在脚本的后面,判断该环境变量值是否为true,如果为true那么就在编译配置LOCAL_CFLAGS中加入c/c++中的宏定义DENABLE_WML=1,(这里的宏定义命名必须是DENABLE_WML了。)
经过以上的配置,然后编译发现会有错误的。编译不过,下一步就是 头文件的包含 了 。
WebKit浏览器编译——开启宏定义相关推荐
- Android CMake 编译传递宏定义参数
在做 C++ 需求开发时经常会遇到用宏定义来区分不同版本.不同平台的功能,如下所示: #ifdef DEBUG// 调用 debug 版本方法 #elif RELEASE// 调用 release 版 ...
- 关于VS中区分debug与release,32位与64位编译的宏定义
在vs编程中,常常涉及到32位和64位程序的编译,怎么判断当前编译是32位编译还是64位编译?如何判断 是debug下编译还是release下编译?因为之前用到,这里记录一下,省的忘了又要疯狂的goo ...
- Unity3D 多平台_预编译相关宏定义
http://www.cnblogs.com/zhaoqingqing/p/3510332.html API地址:http://docs.unity3d.com/Documentation/Manua ...
- MFC 不同编译平台宏定义
Win32: WIN32 X64:_WIN64 Debug:_DEBUG Release: NDEBUG
- linux宏命令编辑,linux-vim宏定义(三)
什么是宏 计算机科学里的宏(Macro),是一种批量批处理的称谓.一般说来,宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是字符串 ...
- C/C++调试用的宏定义
使用宏定义进行调试信息的输出 输出调试信息的方法 调试时打印信息有三种形式: 一是直接写打印函数 二是用ifdef把打印函数包起来,但是这样频繁写ifdef,增大了写代码的压力 三就是直接define ...
- Linux之IFS间隔符、C编程、Makefile工程文件、gdb调试、宏定义、预处理、assert和调试用特殊的宏
1 间隔符 在shell下的for循环语句中,容器中,各个元素之间 是通过 间隔符 来分开的 默认情况下:读取 列表中的值----以 空格.TAB.换行 为间隔符 列表可以为: 常量 ...
- C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针
目录 预编译 值传递.指针传递.引用传递 数组 typedef 函数指针 预编译 预编译又叫预处理.预编译不是编译,而是编译前的处理.这个操作是在正式编译之前由系统自动完成的.#define 和 #i ...
- 编译预处理 -- 带参数的宏定义--【原创】
如有转载请注明出处 编译预处理 -- 带参数的宏定义 前面为输出文件,后面为输入文件 gcc -E -o test.i test.c gcc -o test test.i test.c test ...
最新文章
- 自己实现Java RPC框架一:RMI
- 程序员面试题精选100题(19)-反转链表[数据结构]
- Angular formControl指令定义的位置
- BugkuCTF-WEB题bp
- bootStrap库介绍
- 一个好用的在线微信二维码设计网站
- 【CentOS】Centos下pip的安装
- python实现嵌套列表按指定位置元素排序、按子列表长度、子列表之和、绝对值和、最大/最小值排序
- 订单生产计划表范本_生产计划表(生产计划表格模板)
- Python 爬虫天天基金数据——基金清单
- txt文本如何转换成epub电子书格式
- 绘制confusion matrix的R实现
- 我的Java学习笔记(二)飞机大战小游戏
- 网页audio标签中autoplay自动播放音乐失败解决方案
- 企业宣传型小程序特点-微信小程序开发-视频教程23
- 这个是没事的时候做出来看的一系列算数表
- 虎嗅创新节罗永浩访谈
- sql语句中where 1=1的作用
- JDK工具 appletviewer命令详解
- 5G单灯控制网关 智能照明
热门文章
- CSDN学霸课表——微信公众号开发全部流程
- “苹果正在走下神坛”
- atom 编辑器装BIU神器 activate-power-mode 插件的安装方法
- 86寸电视小米和红米哪个好 小米电视EA Pro对比Redmi MAX86寸区别
- 爬虫之网络数据解析的三种方式---正则表达式、XPath数据解析库、BeautifulSoup数据解析库
- 《人格与其转变》课程笔记
- 亚马逊、阿里、京东对奢侈品“真香“,为何巨头难啃下这块蛋糕?
- jquery在html实现遍历,jQuery教程之jQuery遍历、HTML操作详解
- 这周六很想去爬伟大的香山
- CentOS7 iP 静态网卡 动态网卡 详细设置详解