5 一个能直接运行的Ninja例子,build.ninja文件怎么写?

一个能直接运行的Ninja例子,build.ninja文件怎么写?

作者将狼才鲸
创建日期2024-03-08
  • CSDN文章阅读地址
  • Gitee源码和工程下载地址

  • 如果你使用的是Windows + MSYS2 + MinGW64
    • 已提前安装过gcc
    • msys2命令行中使用 pacman -S mingw-w64-x86_64-ninja 安装Ninja软件
      • 如何搜索msys2中的软件 https://packages.msys2.org/package/mingw-w64-x86_64-ninja?repo=mingw64
jim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel
$ pacman -S mingw-w64-x86_64-ninja
resolving dependencies...
looking for conflicting packages...Packages (1) mingw-w64-x86_64-ninja-1.11.1-2Total Download Size:   0.44 MiB
Total Installed Size:  1.73 MiB:: Proceed with installation? [Y/n] y
:: Retrieving packages...mingw-w64-x86_64-ninja-1.1...   449.2 KiB   286 KiB/s 00:02 [###############################] 100%
(1/1) checking keys in keyring                               [###############################] 100%
(1/1) checking package integrity                             [###############################] 100%
(1/1) loading package files                                  [###############################] 100%
(1/1) checking for file conflicts                            [###############################] 100%
(1/1) checking available disk space                          [###############################] 100%
:: Processing package changes...
(1/1) installing mingw-w64-x86_64-ninja                      [###############################] 100%jim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel
$ ninja --version
1.11.1
  • 如果是Ubuntu系统,则用下面命令安装软件:

    • sudo apt install ninja-build
  • 安装好的软件在msys2的 /mingw64/bin/ 目录下

  • 将这个目录加入到Linux也就是msys2的环境变量中,如果你曾经添加过,则就不要重复添加了

    • echo export PATH=$PATH:/mingw64/bin >> ~/.bashrc 打开家目录下的.bashrc隐藏文件,在最后面加入一行:export PATH=$PATH:/mingw64/bin,保存并关闭文件
    • source ~/.bashrc 立即生效环境变量
  • 默认的构建文件为当前目录下的 build.ninja 文件,类似于Linux中的Makefile文件

    • ninja软件只实现最基本的功能,一般需要其它上层软件来生成一个build.ninja文件,例如Gn软件
    • 你也可以手写build.ninja文件,就像你手写Makefile文件,但是不建议你这么做,所以你也不用看懂ninja配置文件怎么写,以后还是用Gn工具来生成它,下面我会手写一个简单的配置文件,其语法也和Makefile类似,使用了两个空格代替Makefile的tag键。
  • 进入到本仓库的ninja演示目录

    • cd /d/1_git/OH-NEXT-Kernel/src/standalone/01_ninja
  • 新建一个mian.c文件,写上hello world输出

jim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel/src/standalone/01_ninja
$ cat main.c
#include <stdio.h>int main()
{printf("hello world\n");fflush(stdout);while (1);return 0;
}
  • touch build.ninja 新建一个ninja配置文件,写上编译参数
jim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel/src/standalone/01_ninja
$ cat build.ninja
cc = gcc
cflags = -Wallrule cccommand = $cc $cflags -c $in -o $outbuild main.o: cc main.crule linkcommand = $cc $cflags $in -o $outbuild demo.exe: link main.ojim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel/src/standalone/01_ninja
  • 编译命令为 ninja 类似于make的用法
  • 清除上次编译结果的命令为 ninja -t clean
jim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel/src/standalone/01_ninja
$ ls
build.ninja  main.cjim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel/src/standalone/01_ninja
$ ninja
[2/2] gcc -Wall main.o -o demo.exejim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel/src/standalone/01_ninja
$ ls
build.ninja  demo.exe  main.c  main.ojim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel/src/standalone/01_ninja
$ ./demo.exe
hello worldjim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel/src/standalone/01_ninja
$ ninja -t clean
Cleaning... 2 files.jim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel/src/standalone/01_ninja
$ ls
build.ninja  main.cjim@DESKTOP-SVP3BEM MSYS /d/1_git/OH-NEXT-Kernel/src/standalone/01_ninja
  • 参考网址:
    • ninja介绍及使用
    • ninja使用
    • Ninja构建系统入门–手敲一遍BUILD.ninja
    • v61.03 鸿蒙内核源码分析(忍者ninja)
    • Ninja构建系统入门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/730398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫——scrapy-4

免责声明 本文章仅用于学习交流&#xff0c;无任何商业用途 部分图片来自尚硅谷 meta简介 在Scrapy框架中&#xff0c;可以使用meta属性来传递额外的信息。meta属性可以在不同的组件之间传递数据&#xff0c;包括爬虫、中间件和管道等。 在爬虫中&#xff0c;可以使用meta属…

7-4 哲哲打游戏(Python)

哲哲是一位硬核游戏玩家。最近一款名叫《达诺达诺》的新游戏刚刚上市&#xff0c;哲哲自然要快速攻略游戏&#xff0c;守护硬核游戏玩家的一切&#xff01; 为简化模型&#xff0c;我们不妨假设游戏有 N 个剧情点&#xff0c;通过游戏里不同的操作或选择可以从某个剧情点去往另…

二叉树算法题

树的初始化 类包含左右节点属性以及val值。 class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val x;} } 二叉树的中序遍历。 public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res new ArrayList<Integer>…

SQL 的优化手段

目录 1. 索引优化 2. 查询优化 3. SQL语句书写习惯 4. 数据库结构优化 5. 缓存策略 6. 批量操作 7. 服务器硬件和配置 8. 使用执行计划分析 9. 避免锁竞争 10. 其他优化手段 1. 索引优化 使用索引 创建合适的索引可以显著提高查询速度。为经常需要搜索的列、作为查询…

rabbitmq4

独占队列&#xff1a;我们的队列只能被当前通道所绑定&#xff0c;不能被其他的连接所绑定&#xff0c;如果有其他的通道或连接再使用此队列的话&#xff0c;会直接报错&#xff0c;一般设置为false&#xff1a; autoDelete&#xff1a;消费者在消费完队列&#xff0c;并且彻底…

20 卷积层里的填充和步幅【李沐动手学深度学习v2课程笔记】

1. 填充和步幅 在上下左右分别填充一些0 2. 代码实现 2.1 填充 我们创建一个高度和宽度为3的二维卷积层&#xff0c;并在所有侧边填充1个像素。给定高度和宽度为8的输入&#xff0c;则输出的高度和宽度也是8。 import torch from torch import nn# 为了方便起见&#xff0c;…

第三百八十九回

文章目录 1. 概念介绍2. 使用方法2.1 获取所有时区2.2 转换时区时间 3. 示例代码4. 内容总结 我们在上一章回中介绍了"分享一些好的Flutter站点"相关的内容&#xff0c;本章回中将介绍timezone包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在…

LeetCode 2482.行和列中一和零的差值

给你一个下标从 0 开始的 m x n 二进制矩阵 grid 。 我们按照如下过程&#xff0c;定义一个下标从 0 开始的 m x n 差值矩阵 diff &#xff1a; 令第 i 行一的数目为 onesRowi 。 令第 j 列一的数目为 onesColj 。 令第 i 行零的数目为 zerosRowi 。 令第 j 列零的数目为 zer…

el-form-item内的el-select如何自适应宽度

最近在使用element-ui做后台管理的时候&#xff0c;有个需求是在弹窗组件里面&#xff0c;添加一个el-select下拉框选项&#xff0c;但是给el-select设置的宽度无法自适应&#xff0c;原因很简单&#xff0c;我们不需要设置固定宽度&#xff0c;设置百分比就行了&#xff0c;让…

AI中大模型的文件格式有哪些?

环境&#xff1a; 大模型 问题描述&#xff1a; AI中大模型的文件格式有哪些&#xff1f; 解决方案&#xff1a; 大型机器学习模型&#xff0c;例如在自然语言处理、图像识别或其他领域的模型&#xff0c;可能会被保存和分发在多种不同的文件格式中。以下是一些常见的格式…

js 中的一些知识

1.js 往本地内存中写数据 localStorage.setItem(key, value); // 使用localStorage存储数据 sessionStorage.setItem(key, value);// 使用sessionStorage存储数据 let value localStorage.getItem(key); // 读取localStorage数据 let value sessionStorage.getItem(key);…

【框架设计】MVC、MVP、MVVM对比图

1. MVC&#xff08;Model-View-Controller&#xff09; 2. MVP&#xff08;Model-View-Presenter&#xff09; 3. MVVM&#xff08;Model-View-ViewModel&#xff09;

Golang基于Redis bitmap实现布隆过滤器(完结版)

Golang基于Redis bitmap实现布隆过滤器&#xff08;完结版&#xff09; 为了防止黑客恶意刷接口&#xff08;请求压根不存在的数据&#xff09;&#xff0c;目前通常有以下几种做法&#xff1a; 限制IP&#xff08;限流&#xff09;Redis缓存不存在的key布隆过滤器挡在Redis前 …

golang 协程 (goroutine) 与通道 (channel)

golang的协程和通道&#xff0c;之前就看过了&#xff0c;一直没有很好的理解&#xff0c;所以一直也没记录&#xff0c;今天看书&#xff0c;看到有一个总结的章节&#xff0c;里面记录了一些注意事项&#xff0c;因此写个文档&#xff0c;记录一下&#xff0c;避免以后自己忘…

对simplex算法的时间复杂度进行分析

对于simplex算法,如果每进行一次pivot变换,目标函数所得到的结果都会有可能出现增加的情况,所以得到的结论中,可以肯定它的值是一定不会出现减少的情况的,每次从目标函数中找到一个系数大于0的变量,然后再在约束条件中选取能够让它的增值最少的那个来继续进行pivot变换。…

linux kernel物理内存概述(五)

目录 概述 一、快速路径分配 1、get_page_from_freelist 2、rmqueue()函数 二、慢速路径分配 1、分配流程 三、direct_compact 概述 物理内存分配步骤 1、初始化,参数初始化 2、内存充足&#xff0c;快速分配 get_page_from_freelist 3、内存压力大&#xff0c;慢速…

程序员有哪些常用的技术网站呢?

在当今信息化时代&#xff0c;程序员们能够通过互联网接触到许多优秀的技术网站&#xff0c;这些网站为他们提供了丰富的学习资源和交流平台。这些技术网站涵盖了各种软件开发、设计、数据分析和人工智能等领域&#xff0c;为程序员们提供了广阔的学习空间和交流机会。在这篇文…

openCV保存图像

保存图像 //保存为png透明通道vector<int>opts;opts.push_back(IMWRITE_PAM_FORMAT_RGB_ALPHA);imwrite("D:/img_bgra.png", img, opts);//保存为单通道灰度图像img cv::imread(imagePath.toStdString(), IMREAD_GRAYSCALE);vector<int> opts_gray;opts…

类和对象-C++运算符重载

#include <iostream> #include <string> using namespace std;class Person { public:Person(int age){m_Agenew int (age);}~Person(){if(m_Age!NULL){delete m_Age;m_AgeNULL;}}//重载 赋值运算符Person& operator (Person &p){//编译器提供深拷贝//m_Ag…

嵌入式软件开发工程师如何提高C语言编码技能?

嵌入式软件开发工程师如何提高C语言编码技能&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提升…