使用下载编译好的gn和ninja报错

先git clone下载了gn的源码[https://gn.googlesource.com/gn],想自己编译得到gn.exe,但是报错 (具体的步骤是参考博客园的文章<gn/ninja: 谷歌的新一代项目构建系统简介>,第一部分详细描述了gn和ninja的背景,但是第二部分安装和基本使用流程描述的是"以Ubuntu Linux为例,首先需要先安装ninja"),就直接下载了编译好的gn和Ninja(关键字"gn.exe"百度搜索到51CTO博客文章<【OpenHarmony快速入门】使用VSCode编写程序源码以及基础设置>有描述“下载gn-windows-amd64.zip”,然后关键字"gn-windows-amd64.zip"就能搜到,下载解压后就得到gn.exe文件。)(后面终于自己在Windows下编译成功得到gn.exe,自己在windows下的尝试步骤如下一段落),然后参照了<gn\examples\simple_build>写了Helloworld应用以及对应的BUILD.gn(把原本的gn\examples\simple_build目录下的BUILD.gn删掉掉deps部分已经library编译部分),然后将"gn\examples\simple_build\build"拷贝至当前目录,结果Ninja编译报错,看起来是g++没有找到,奇怪明明已经下载的是ninja-win到"D:\Program Files"。(在本篇的"windows尝试ninja来编译c++项目"有描述搭建了MinGW的环境后,ninja编译简单的C++成功了。)在这里插入图片描述

windows尝试编译GN

“先安装ninja”:去[https://github.com/ninja-build/ninja]直接下载ninja.exe并添加路径环境变量Path下,直接CMD然后编译报错如下:在这里插入图片描述然后启动"x64 Native Tools Command Prompt for VS 2022"同样的步骤不再报错"CreateProcess failed: The system cannot find the file specified.“,但是会报另外的错误"gn\src\gn\escape.h(1): error C2220: the following warning is treated as an error”在这里插入图片描述

解决C2220问题

去ninja的源码Issue中搜索在这里插入图片描述然后将上面的"gn\build\gen.py"中的"cflags.append(‘/WX’)"注释掉,然后重新编译成功得到gn.exe

windows尝试编译GN

按照github上的wiki,先用cmd窗口编译失败,然后管理员权限打开"Developer Command Pormpt for VS",编译成功。在这里插入图片描述

windows尝试ninja来编译c++项目

Google关键字"windows ninja g++ CreateProcess failed: The system cannot find the file specified.“搜到csdn上文章<CreateProcess failed: The system cannot find the file specified.>,博主描述说"将GCC = D:\MinGW\bin\g++.exe 变量写错路径了”,然后博主参考的是Ninja构建系统入门,然后发现虽然他们是在windows上编译,但是有安装MinGW。然后尝试本地安装MinGW,关键字"windows 安装 MinGW"搜到知乎文章<MinGW安装与环境配置(Window)>后,参照下载x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z解压后配置环境变量就成功搭建好MinGW环境,"ninja -C xxx(gn gen生成的目录名)“就不再报"g++ CreateProcess failed:“错误。前面最简单的helloworld也能正常运行了。
然后去尝试编译gn\examples\simple_build时候报错"g++: error: obj/libhello_static.a: No such file or directory”,后面查看是由于在生成静态库的时候没有正常生成libhello_static.a,然后手动操作后成功了。
在这里插入图片描述
2024-09-01重新测试,在Sonya9上测试成功,其中参考了<WebRTC编译>的"安装depot_tools"描述部分,“update_depot_tools.bat批处理文件”,还要注意depot_tools在path路径的顶部,然后将这个文件夹完全拷贝到另一个没有VPN的Piper9上,还是不行如下在这里插入图片描述
继续执行"ninja -C out -v"指令会报如下错误在这里插入图片描述
然后对比"gn gen xxx"生成的编译脚本,发现Piper9上的生成的toolchain.ninja文件多了"rm -f ${out} &&”,删除后再执行"ninja -C xxx -v"就能成功生成hello.exe并运行。只是把gn和ninja的代码都下载下来也没有看到有包含toolchain.ninja这个文件,不清楚gn gen的生成过程。在这里插入图片描述

windows尝试gn生成visual studio的sln工程

打开https://gn.googlesource.com/gn,然后去到Reference页面,看到有“IDE options”,可以通过gn直接生成windows的sln工程项目文件,然后一开始直接加–ide编译没有成功,就去到Sonya9上测试,还参考了前面<WebRTC编译>的"编译WebRTC"描述部分,虽然"临时配置环境变量",但是生成的sln并没有什么特别的区别,然后发现工作机不成功还是因为前面的rm指令,把toolchain.ninja中的rm部分删掉后,再用VS2019就能成功编译了。不过生成的sln工程并没有什么特别意义,因为无法单步调试。然后去到gn的官网并进到"GN Frequently Asked Questions",其中"Can I generate XCode or Visual Studio projects?"描述了只能生成类似的sln工程,具体的编译还是ninja,并不能生成真实的sln工程。

windows ninja构建C++

关键字"ninja windows 构建"搜索到博客园文章<在Windows平台编译、部署Ninja>,但是该文章只是说如何部署Ninja,但是CSDN上的文章<在windows上配置ninja环境>已经是从github上直接下载的预编译的exe,直接将路径放到环境变量下就可以了。前面博客园文章的链接<Ninja构建系统入门>有描述"cmake来生成ninja的配置"即build目录下的build.ninja文件。搜到脚本之家上文章<Windows配置VSCode+CMake+Ninja+Boost.Test的C++开发环境(教程详解)>,其中有描述"安装CMake和Ninja",下载最新的cmake-3.30.2-windows-x86_64.msi直接安装,然后直接参考前面文章<Ninja构建系统入门>编译cmake-examples的示例,结果报错”CMake没有找到C和C++编译器“,然后ChatGPT描述(打开“x64 Native Tools Command Prompt for VS”或“x86 Native Tools Command Prompt for VS”,这将设置环境以使用MSVC编译器),此时再次运行就可以生成build.ninja文件,然后直接ninja也可以生成exe文件。

谷歌关键字"Chromium"搜索到主页,然后进一步到"Browse or Search Chromium Code"可以在线查看源码[https://source.chromium.org/chromium],但是貌似看到的都是最新的代码架构。然后去到github上chromium,在项目介绍"About The official GitHub mirror of the Chromium source"旁边有链接[https://chromium.googlesource.com/chromium/src/],打开后看到有很多的Tags,然后进入到目标tag的仓库中,就可以看到特定的tag的代码结构。

参考文档

https://gn.googlesource.com/gn/#getting-a-binary
Ninja构建系统入门

GitHub 加速计划 / ni / ninja
10.88 K
1.57 K
下载
a small build system with a focus on speed
最近提交(Master分支:24 天前 )
dcefb838 Fix typo: Explaantions -> Explanations 3 个月前
2f19d3a0 - 3 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐