序
在CMake时代,它可以说来得早,但可惜的是,google内部有bazel/blade,并没有重视这个小而轻快的小工具。
基于python.exe 解释器的逻辑
从开源角度出发,开发者信任操作系统,信任python解释器,但不信任exe/dll插件。
于是gn选择了默认用python解释器当作plugin 对接其内部的action() {}
从而可以将plugin开源
Python友好吗?
它需要python环境和相应的第三方包(from pip),也需要开发人员会写python。
再回过头看 Google Bazel需要携带Java友好吗?
如果你真的需要Chrome GN,请参见入门贴
https://blog.vrqq.org/archives/712/
以及目前的编译环境(从chromium source code精简而得),欢迎大家多多补充third_party,充实这个repo。
TODO: GITHUB Repo Link here
作者注:我觉得自己很奇怪,可以理解C++语法思想和java,可以写NodeJS,但写不出Python。或许是从效率角度上无法感知Python做了什么,或许是担心写出来的脚本丑陋,奇怪的是,确实写不出。
注2:Facebook Buck 1代也给基于java,2代他们似乎明白了什么,改用Rust。我觉得Rust/Go更适合这种build-tools,而不是java。
GN的加载顺序
主要有三种target: executable,shared_library和static_library
解析顺序如下:
- 根目录的.gn文件: buildconfig='//gn_build/BUILDCONFIG.gn'
上述文件中提到的BUILDCONFIG.gn:
set_defaults()
,set_default_toolchain("//toolchain1:xxx")
- set_defaults(): 设置target的默认参数
- 每个文件下的BUILD.gn里面的 shared_library等等target
第二步中提到的"//toolchain1:xxx" 针对每个arget 解析2、3两步累加的参数生成最终调用命令并运行
- 注:target里面所有字段的生效顺序均为上述1->2->3,例如2中写了
set_defaults() {config=[...]}
,3里面就可以写shared_library() {config-=[...]}
- 注:target里面所有字段的生效顺序均为上述1->2->3,例如2中写了
真好呢
真好呢
真棒!
没有传奇客户端私服,玩家该如何进行游戏?:https://501h.com/yuanshi/2024-09-13/34802.html
文章的确不错啊https://www.cscnn.com/
看的我热血沸腾啊www.jiwenlaw.com
想想你的文章写的特别好https://www.237fa.com/
除了谷歌项目,用的不多,感觉还是camke更流行
包括google的bazel,还有facebook的buck,都是modern cmake形态的函数式。但GN起码从形态上面向对象了。。
我最近用GN思想作了一个简易的c++ 语法的编译脚本解释器,正在完善中,有兴趣的话欢迎补充:https://github.com/vrqq/cgn