GYP 简介

Google Breakpad--VS2015 编译、使用、定位错误(如何使用gyp) 再来一个google自带光环的开源库:Google Breakpad什么是Google Breakpad?Google Breakpad is a cross platform crash handler which generates minidumps when your application crash. Users can send these minidumps to you and i 阅读详情

GYP 简介

http://blog.xiaogaozi.org/2011/10/29/introduction-to-gyp/


说起项目构建工具,Linux 用户最熟悉的恐怕就是 Autotools,它将编译安装这个步骤大大简化。但对于项目作者来说,想要使用 Autotools 生成有效的配置文件着实需要下一番功夫,用现在流行的话来说就是用户体验不够友好。对 Unix shell 的依赖,也使得 Autotools 天生对于跨平台支持不佳。

后来我从大猫同学那里听说了 CMake,CMake 使用 C++ 编写,原生支持跨平台,不需要像 Autotools 那样写一堆的配置文件,只需一个 CMakeLists.txt 文件即可。简洁的使用方式,强大的功能使得我立马对 CMake 情有独钟。在后来的使用过程中,虽然会遇到一些因为使用习惯带来的小困扰,但我对于 CMake 还是基本满意的。直到我发现了 GYP。

GYP(Generate Your Projects)是由 Chromium 团队开发的跨平台自动化项目构建工具,Chromium 便是通过 GYP 进行项目构建管理。为什么我要选择 GYP,而放弃 CMake 呢?功能上 GYP 和 CMake 很是相似,在我看来,它们的最大区别在于配置文件的编写方式和其中蕴含的思想。

编写 CMake 配置文件相比 Autotools 来说已经简化很多,一个最简单的配置文件只需要写上源文件及生成类型(可执行文件、静态库、动态库等)即可。对分支语句和循环语句的支持也使得 CMake 更加灵活。但是,CMake 最大的问题也是在这个配置文件,请看下面这个示例文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
cmake_minimum_required(VERSION 2.8)
project(VP8 CXX)

add_definitions(-Wall)
cmake_policy(SET CMP0015 NEW)
include_directories("include")
link_directories("lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "../lib")
set(VP8SRC VP8Encoder.cpp VP8Decoder.cpp)

if(X86)
    set(CMAKE_SYSTEM_NAME Darwin)
    set(CMAKE_SYSTEM_PROCESSOR i386)
    set(CMAKE_OSX_ARCHITECTURES "i386")

    add_library(vp8 STATIC ${VP8SRC})
elseif(IPHONE)
    if(SIMULATOR)
        set(PLATFORM "iPhoneSimulator")
        set(PROCESSOR i386)
        set(ARCH "i386")
    else()
        set(PLATFORM "iPhoneOS")
        set(PROCESSOR arm)
        set(ARCH "armv7")
    endif()

    set(SDKVER "4.0")
    set(DEVROOT "/Developer/Platforms/${PLATFORM}.platform/Developer")
    set(SDKROOT "${DEVROOT}/SDKs/${PLATFORM}${SDKVER}.sdk")
    set(CMAKE_OSX_SYSROOT "${SDKROOT}")
    set(CMAKE_SYSTEM_NAME Generic)
    set(CMAKE_SYSTEM_PROCESSOR ${PROCESSOR})
    set(CMAKE_CXX_COMPILER "${DEVROOT}/usr/bin/g++")
    set(CMAKE_OSX_ARCHITECTURES ${ARCH})

    include_directories(SYSTEM "${SDKROOT}/usr/include")
    link_directories(SYSTEM "${SDKROOT}/usr/lib")

    add_definitions(-D_PHONE)
    add_library(vp8-armv7-darwin STATIC ${VP8SRC})
endif()

你能一眼看出这个配置文件干了什么吗?其实这个配置文件想要产生的目标(target)只有一个,就是通过 ${VP8SRC} 编译生成的静态库,但因为加上了条件判断,及各种平台相关配置,使得这个配置文件看起来很是复杂。在我看来,编写 CMake 配置文件是一种线性思维,对于同一个目标的配置可能会零散分布在各个地方。而 GYP 则相当不同,GYP 的配置文件更多地强调模块化、结构化。看看下面这个示例文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{
  'targets': [
    {
      'target_name': 'foo',
      'type': '<(library)',
      'dependencies': [
        'bar',
      ],
      'defines': [
        'DEFINE_FOO',
        'DEFINE_A_VALUE=value',
      ],
      'include_dirs': [
        '..',
      ],
      'sources': [
        'file1.cc',
        'file2.cc',
      ],
      'conditions': [
        ['OS=="linux"', {
          'defines': [
            'LINUX_DEFINE',
          ],
          'include_dirs': [
            'include/linux',
          ],
        }],
        ['OS=="win"', {
          'defines': [
            'WINDOWS_SPECIFIC_DEFINE',
          ],
        }, { # OS != "win",
          'defines': [
            'NON_WINDOWS_DEFINE',
          ],
        }]
      ],
    }
  ],
}

我们可以立马看出上面这个配置文件的输出目标只有一个,也就是 foo,它是一个库文件(至于是静态的还是动态的这需要在生成项目时指定),它依赖的目标、宏定义、包含的头文件路径、源文件是什么,以及根据不同平台设定的不同配置等。这种定义配置文件的方式相比 CMake 来说,让我觉得更加舒服,也更加清晰,特别是当一个输出目标的配置越来越多时,使用 CMake 来管理可能会愈加混乱。

配置文件的编写方式是我区分 GYP 和 CMake 之间最大的不同点,当然 GYP 也有一些小细节值得注意,比如支持跨平台项目工程文件输出,Windows 平台默认是 Visual Studio,Linux 平台默认是 Makefile,Mac 平台默认是 Xcode,这个功能 CMake 也同样支持,只是缺少了 Xcode。Chromium 团队成员也撰文详细比较了 GYP 和 CMake 之间的优缺点,在开发 GYP 之前,他们也曾试图转到 SCons(这个我没用过,有经验的同学可以比较一下),但是失败了,于是 GYP 就诞生了。

当然 GYP 也不是没有缺点,相反,我觉得它的「缺点」一大堆:

  • 文档不够完整,项目不够正式,某些地方还保留着 Chromium 的影子,看起来像是还没有完全独立出来。
  • 大量的括号嵌套,很容易让人看晕,有过 Lisp 使用经验的同学可以对号入座。对于有括号恐惧症,或者不使用现代编辑器的同学基本可以绕行。
  • 为了支持跨平台,有时不得不加入某些特定平台的配置信息,比如只适用于 Visual Studio 的 RuntimeLibrary 配置,这不利于跨平台配置文件的编写,也无形中增加了编写复杂度。
  • 不支持 make clean,唯一的方法就是将输出目录整个删除或者手动删除其中的某些文件。

如果你已经打算尝试 GYP,那一定记得在生成项目工程文件时加上 --depth 参数,譬如:

$ gyp --depth=. foo.gyp

这也是一个从 Chromium 项目遗留下来的历史问题。

也许你根本用不上跨平台特性,但是 GYP 依然值得尝试。我编写了一份 GYP 配置文件的模板,有兴趣的同学可以参考。GYP 和 CMake 分别代表了两种迥异的「风格」,至于孰优孰劣,还得仁者见仁,智者见智。

npm ERR, gyp ERR报错 npm ERR! code 1 npm ERR! path E:\uino\citybuilder\node_modules\canvas npm ERR! command failed npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node-gyp rebuild npm ERR! gyp info it worked if it ends with ok npm ERR! gyp info using node-gyp@7.1.2 npm E 阅读详情

相关推荐

三、 node-gyp 调用 C++ 配置

如果项目没有与 C++ 交互的需求可以不配置       1. 创建 binding.gyp 文件 在项目根目录创建 binding.gyp 文件, 输入如下内容: { "targets": [ { "target_name": "addon", "sources": [ "cpp/addon.cc"], }]} 2. 创建 CPP 文件 在项目根目录创建一个 ...

Fx的博客 2689

pip install PyInstaller安装失败 no such option: --no-user

以管理员方式运行程序 一、安装 1、安装pywin32   pip命令安装:pip install pywin32(推荐) pip命令安装:pip install pywin32-ctypes 2、安装Pyinstaller   pip命令安装:pip install PyInstaller 如果还出现 no such option: --no-user,改为提示的命令行.: D:...

camille靖的博客 4万+

Inside NAND Flash Memories.中文版. Chatper 2 [2.1-2.2.1]

2.1 Introduction 半导体存储器分类: RAM:Random Access Memories--掉电丢失 ROM:Read Only Memories--只读,出厂时写好;掉电不丢失;不可更改。 NVM:Non-Volatile Memories--电可擦除/写入,并且掉电不丢失。第一类产品为EPROM memory (Erasable Programmable Read...

xuqikang的专栏 3608

Win10+VS2015 下载、编译和使用google breakpad

一、下载准备1.1 下载breakpad breakpad源码官方网址:https://chromium.googlesource.com/breakpad/breakpad 官方下载方法,git命令:git clone https://chromium.googlesource.com/breakpad/breakpad但如果下载出错,如: Cloning into ‘breakpad’…

Jinato的博客 2349

高通Camx架构调试不求人:手把手教你开UMD/KMD Log与Dump图像(附离线Log合成脚本)

本文详细介绍了高通Camx架构的调试方法,包括UMD/KMD Log的精准配置与图像Dump技术,帮助工程师快速定位移动影像系统中的问题。通过实战案例和自动化脚本,提升调试效率,适用于图像色彩异常、帧率波动等常见问题的诊断与解决。

weixin_30516243的博客 254

MAC M1用户必看:UTM虚拟机安装Win11全流程避坑指南(附驱动下载)

本文为MAC M1用户提供UTM虚拟机安装Win11的完整指南,涵盖镜像准备、驱动优化及性能调优等关键步骤。特别针对TPM 2.0验证、网络连接等常见问题提供解决方案,帮助用户高效运行Windows 11 ARM版。

weixin_29204205的博客 341

使用google breakpad生成dump文件

使用google breakpad生成dump文件 breakpad的主要功能就是生成dump文件,还可以将dump文件发送的远程http服务器。 breakpad的SVN在这里http://google-breakpad.googlecode.com/svn/trunk linux,mac,solaris,windows下面产生dump文件的例子文件在这几个文件里面,他们的流程几乎是一...

kimi's blog 533

SAP Fiori 从技术上而言到底包含哪些组件?

SAP Fiori是企业级UX设计的系统化解决方案,基于五大原则构建:角色导向(Role-based)、自适应(Adaptive)、简洁(Simple)、一致(Coherent)和愉悦(Delightful)。其技术实现包含SAPUI5开发框架、Fiori Launchpad统一入口、OData服务网关等核心组件,通过标准化设计模式与开发工具链,显著提升企业应用的用户体验和开发效率。典型案例显示,遵循Fiori原则可缩短30%以上的操作时长,降低50%的培训成本。该体系既保持跨设备一致性,又支持业务场景的深

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 223

windows10下使用gyp编译google_breakpad

看到google_breakpad这个跨平台的开源项目后希望在自己的项目中使用,在网上转了一圈后发现很多文章都不太正确(或失效),特自己记录下整个过程。

cz_jjq的专栏 1712

国家自然基金回避专家有必要填写吗?被回避专家能看到吗?

不填也能中填1–2个最保险只填1个最直接竞争者。✅一句话结论可以不填,但建议填1–2个被回避专家绝对看不到如果你愿意,我可以再告诉你一个很多人不知道的国家自然基金“评审分组规则”——它其实决定了你的项目最可能送到哪些专家手里,这对地区基金中标率影响很大。

qq_15963745的博客 156

2025.06.06【Ribo-seq】|RiboCode:基于Ribo-seq数据的全基因组翻译ORF检测工具详解与实战流程

大家好!今天我们要学习的是RiboCode——一个专为Ribo-seq(核糖体足迹测序)数据设计的高质量翻译ORF(开放阅读框)检测工具。RiboCode能够帮助我们在全基因组范围内精准识别翻译事件,发掘经典CDS之外的uORF、dORF、重叠ORF等新型翻译本,极大拓展了我们对转录本翻译潜能的认知。RiboCode 是由清华大学杨学睿课题组开发的开源软件,支持Linux/Mac平台,采用Python实现。自动化流程:一条命令即可完成注释准备、P-site定位、ORF预测。高灵敏度与特异性。

1858

gyp linux,GYP 简介

说起项目构建工具,Linux 用户最熟悉的恐怕就是 Autotools,它将编译安装这个步骤大大简化。但对于项目作者来说,想要使用 Autotools 生成有效的配置文件着实需要下一番功夫,用现在流行的话来说就是用户体验不够友好。对 Unix shell 的依赖,也使得 Autotools 天生对于跨平台支持不佳。后来我从大猫同学那里听说了 CMake,CMake 使用 C++ 编写,原生支持跨平...

weixin_32407355的博客 1157

自然语言处理6 -- 情感分析

1 概述 情感分析是自然语言处理中常见的场景,比如淘宝商品评价,饿了么外卖评价等,对于指导产品更新迭代具有关键性作用。通过情感分析,可以挖掘产品在各个维度的优劣,从而明确如何改进产品。比如对外卖评价,可以分析菜品口味、送达时间、送餐态度、菜品丰富度等多个维度的用户情感指数,从而从各个维度上改进外卖服务。 情感分析可以采用基于情感词典的传统方法,也可以采用基于深度学习的方法,下面详细讲解 ...

谢杨易的博客 5万+

node-gyp工具简介

node-gyp 的本质是一个“原生插件编译工具”。它的核心任务是:将用 C、C++ 等原生语言编写的代码(Addons)编译成 Node.js 能够直接 require 的二进制文件(通常是 .node 文件)。

zhaominyong的专栏 1437

Sprd Android 13 备忘 OTA升级app没更新到目标版本,恢复出厂才生效修改这个值

【代码】Sprd Android 13 备忘 OTA升级app没更新到目标版本,恢复出厂才生效修改这个值。

m0_60898338的博客 679

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

GYP 简介——与cmake比较

说起项目构建工具,Linux 用户最熟悉的恐怕就是 Autotools,它将编译安装这个步骤大大简化。但对于项目作者来说,想要使用 Autotools 生成有效的配置文件着实需要下一番功夫,用现在流行的话来说就是用户体验不够友好。对 Unix shell 的依赖,也使得 Autotools 天生对于跨平台支持不佳。 后来我从大猫同学那里听说了 CMake,CMake 使用 C++ 编写,

bytxl的专栏 3335

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Hello GYP

转自:http://blog.youkuaiyun.com/ropig/article/details/48625609(侵删) GYP,Generate Your Projects,一个google开源的构建系统,最开始用于Chromium项目,现在一些其他的开源项目也开始使用GYP,如V8和node-gyp。本文是学习使用GYP的笔记,算是一个GYP的简明教程吧。 特别之处 在已

坚持不一定成功,但放弃一定失败~ 1511

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

平台交叉打包 GYP

GYP,Generate Your Projects,一个google开源的构建系统,最开始用于Chromium项目,现在一些其他的开源项目也开始使用GYP,如V8和node-gyp。本文是学习使用GYP的笔记,算是一个GYP的简明教程吧。 特别之处 在已经有很多的构建系统的情况下,gyp诞生的哲学或者说优点如下: 各平台使用各自主流的构建系统。 程序员更熟悉自

zoomin的专栏 3053

GYP介绍

xiaoshixiu的专栏 4635

解决node-gyp安装vuetify编译失败gyp ERR问题

问题 在安装 vuetify 的时候发现了 node-gyp 编译失败的问题,报错很友好: gyp info it worked if it ends with ok gyp info using node-gyp@5.1.0 gyp info using node@14.8.0 | win32 | x64 gyp info find Python using Python version 3.8.5 found at “D:\Program Files\Python38\python.exe” gyp

幻日のヨハネ 5万+

GYP,GN和Ninja

转载自: http://www.alonemonkey.com/2016/06/15/gn-gyp-ninja/ chromium的编译过程中用到了GYP,GN和Ninja这三个构建工具,GYP是一个在不同平台构建项目的工具,GN是GYP的升级版,Ninja是一个小型追求速度的构建系统。 GYP GYP是Generate Your Projects的缩写,GYP的

p13503959390的博客 4556
上一篇: wget 下载整个网站,或者特定目录
下一篇: Android 启动性能优化 - kernel篇
killmice
博客等级 码龄14年 119粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值