例如: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浏览器编译——开启宏定义相关推荐

  1. Android CMake 编译传递宏定义参数

    在做 C++ 需求开发时经常会遇到用宏定义来区分不同版本.不同平台的功能,如下所示: #ifdef DEBUG// 调用 debug 版本方法 #elif RELEASE// 调用 release 版 ...

  2. 关于VS中区分debug与release,32位与64位编译的宏定义

    在vs编程中,常常涉及到32位和64位程序的编译,怎么判断当前编译是32位编译还是64位编译?如何判断 是debug下编译还是release下编译?因为之前用到,这里记录一下,省的忘了又要疯狂的goo ...

  3. Unity3D 多平台_预编译相关宏定义

    http://www.cnblogs.com/zhaoqingqing/p/3510332.html API地址:http://docs.unity3d.com/Documentation/Manua ...

  4. MFC 不同编译平台宏定义

    Win32: WIN32 X64:_WIN64 Debug:_DEBUG Release: NDEBUG

  5. linux宏命令编辑,linux-vim宏定义(三)

    什么是宏 计算机科学里的宏(Macro),是一种批量批处理的称谓.一般说来,宏是一种规则或模式,或称语法替换 ,用于说明某一特定输入(通常是字符串)如何根据预定义的规则转换成对应的输出(通常也是字符串 ...

  6. C/C++调试用的宏定义

    使用宏定义进行调试信息的输出 输出调试信息的方法 调试时打印信息有三种形式: 一是直接写打印函数 二是用ifdef把打印函数包起来,但是这样频繁写ifdef,增大了写代码的压力 三就是直接define ...

  7. Linux之IFS间隔符、C编程、Makefile工程文件、gdb调试、宏定义、预处理、assert和调试用特殊的宏

    1 间隔符 在shell下的for循环语句中,容器中,各个元素之间 是通过 间隔符 来分开的 默认情况下:读取 列表中的值----以 空格.TAB.换行  为间隔符 列表可以为:     常量    ...

  8. C语言学习笔记--预编译/宏定义/数组/参数传递/函数指针

    目录 预编译 值传递.指针传递.引用传递 数组 typedef 函数指针 预编译 预编译又叫预处理.预编译不是编译,而是编译前的处理.这个操作是在正式编译之前由系统自动完成的.#define 和 #i ...

  9. 编译预处理 -- 带参数的宏定义--【原创】

    如有转载请注明出处 编译预处理  --  带参数的宏定义 前面为输出文件,后面为输入文件 gcc -E -o test.i test.c gcc -o test  test.i test.c test ...

最新文章

  1. 自己实现Java RPC框架一:RMI
  2. 程序员面试题精选100题(19)-反转链表[数据结构]
  3. Angular formControl指令定义的位置
  4. BugkuCTF-WEB题bp
  5. bootStrap库介绍
  6. 一个好用的在线微信二维码设计网站
  7. 【CentOS】Centos下pip的安装
  8. python实现嵌套列表按指定位置元素排序、按子列表长度、子列表之和、绝对值和、最大/最小值排序
  9. 订单生产计划表范本_生产计划表(生产计划表格模板)
  10. Python 爬虫天天基金数据——基金清单
  11. txt文本如何转换成epub电子书格式
  12. 绘制confusion matrix的R实现
  13. 我的Java学习笔记(二)飞机大战小游戏
  14. 网页audio标签中autoplay自动播放音乐失败解决方案
  15. 企业宣传型小程序特点-微信小程序开发-视频教程23
  16. 这个是没事的时候做出来看的一系列算数表
  17. 虎嗅创新节罗永浩访谈
  18. sql语句中where 1=1的作用
  19. JDK工具 appletviewer命令详解
  20. 5G单灯控制网关 智能照明

热门文章

  1. CSDN学霸课表——微信公众号开发全部流程
  2. “苹果正在走下神坛”
  3. atom 编辑器装BIU神器 activate-power-mode 插件的安装方法
  4. 86寸电视小米和红米哪个好 小米电视EA Pro对比Redmi MAX86寸区别
  5. 爬虫之网络数据解析的三种方式---正则表达式、XPath数据解析库、BeautifulSoup数据解析库
  6. 《人格与其转变》课程笔记
  7. 亚马逊、阿里、京东对奢侈品“真香“,为何巨头难啃下这块蛋糕?
  8. jquery在html实现遍历,jQuery教程之jQuery遍历、HTML操作详解
  9. 这周六很想去爬伟大的香山
  10. CentOS7 iP 静态网卡 动态网卡 详细设置详解