基于RTEMS项目学习waf build system

https://waf.io/book
https://blog.csdn.net/u010312436/article/details/81093847

安装

curl -o waf https://waf.io/waf-2.0.27
chmod 755 waf

使用

  • 函数命令
    在 wscript 文件中定义函数命令
def hello(ctx):print('hello world')

通过命令行调用函数

$ waf hello
hello world
'hello' finished successfully (0.001s)

ctx对象允许跨脚本共享数据。

命令函数在调用时会传递一个新的上下文对象;该对象的类是特定于命令的:ConfigureContext 用于配置,BuildContext 用于构建,OptionContext 用于选项,Context 用于任何其他命令。

  • 项目结构
$ tree
|-- src
|   `-- wscript
`-- wscript

顶级wscript中的命令将通过调用名为recurse的上下文方法来调用子项目wscript文件中的相同命令:

def ping(ctx):print('→ ping from ' + ctx.path.abspath())ctx.recurse('src')

这是src/wscript的内容

def ping(ctx):print('→ ping from ' + ctx.path.abspath())
  • 经常使用的函数命令
  1. configure
    配置项目,找到依赖项的位置,收集 和 储存文件夹(项目目录、构建目录、系统文件)信息。
    configure命令用于检查是否满足项目工作的要求并存储信息。然后存储参数以供其他命令(例如构建命令)使用。

  2. options
    用于定义命令行选项

def options(ctx):ctx.add_option('--foo', action='store', default=False, help='Silly test')

访问--prefix命令行选项:

print('→ prefix is ' + ctx.options.prefix)
  1. build
    构建目标
    直接 ./waf 等同于 ./waf build
def options(opt):opt.load('compiler_c')def configure(conf):conf.load('compiler_c')def build(bld):#program: 目标是生成应用程序 appbld.program(source='main.c', target='app', use='myshlib mystlib')#stlib: 目标是生成静态库 mystlib.abld.stlib(source='a.c', target='mystlib', use='myobjects')#shlib: 目标是生成动态库 myshlib.sobld.shlib(source='b.c', target='myshlib')#objects:目标是生成c.obld.objects(source='c.c', target='myobjects')

或者用 features

    bld(features = 'c cprogram',target = 'test.exe',cflags = '-g -O2',# libpath = '/home/yangn0/RTEMS_devel/rtems/6/aarch64-rtems6/raspberrypi4b/lib/',# stlib = ['z'],linkflags = '-lz',source = [# './udp_echo_server/rtems_config.c','./udp_echo_server/udp_echo_server.c'# 'test_uart.c''test_shell.c'# 'test_fdt.c'])

RTEMS WAF

RTEMS Waf 是一个支持 Waf 构建系统和 RTEMS 的模块。该模块集成到项目或库中,提供 Waf 构建支持以创建 RTEMS 库或可执行文件。

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

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

相关文章

三极管工作原理,以及小电流,如何驱动大电流

因为研究【自动下载电路实现】,涉及到三极管内容,之前看过,现在回看之前的笔记,一点印象都没了,于是,想了个办法,记住它 个人联想,不喜绕道,只是帮助个人记忆的 标题也是…

干货 | WIFI7和WIFI6区别简单介绍

1、传输标准 WIFI 6使用的是11ax标准WIFI 7使用的是11be标准 2、编码方式及带宽 WIFI6使用了1024-QAM调制方式,将每个数据符号编码为10位。WIFI7使用了更高阶的4096-QAM,将每个符号编码为12位,提高了单位时间内的数据传输量。虽然更高阶的调…

React基础知识一

写的东西太多了,照成csdn文档编辑器都开始卡顿了,所以分篇写。 1.安装React 需要安装下面三个包。 react:react核心包 react-dom:渲染需要用到的核心包 babel:将jsx语法转换成React代码的工具。(没使用jsx可以不装)1.1 在html中…

对象存储访问管理

一、前言 对象存储是一种以对象为中心的存储方式,将数据存储为对象而不是文件,在对象存储中,每个对象都有唯一的标识符,这个标识符是由系统自动生成的。与传统文件系统不同,对象存储中不需要使用文件夹或路径来查找对…

【Java】二叉树:数据海洋中灯塔式结构探秘(上)

个人主页 🌹:喜欢做梦 二叉树中有一个树,我们可以猜到他和树有关,那我们先了解一下什么是树,在来了解一下二叉树 一🍝、树型结构 1🍨.什么是树型结构? 树是一种非线性的数据结构&…

Lucene(2):Springboot整合全文检索引擎TermInSetQuery应用实例附源码

前言 本章代码已分享至Gitee: https://gitee.com/lengcz/springbootlucene01 接上文。Lucene(1):Springboot整合全文检索引擎Lucene常规入门附源码 如何在指定范围内查询。从lucene 7 开始,filter 被弃用,导致无法进行调节过滤。 TermInSetQuery 指定…

xiaolin coding 图解网络笔记——HTTP篇

1. HTTP 是什么? HTTP 是超文本传输协议(HyperText Transfer Protocol),一个用在计算机世界里专门在【两点】之间【传输】文字、图片、音频、视频等【超文本】数据的【约定和规范】。 2. HTTP 常见的状态码有哪些? …

51c深度学习~合集8

我自己的原文哦~ https://blog.51cto.com/whaosoft/12491632 #patchmix 近期中南大学的几位研究者做了一项对比学习方面的工作——「Inter-Instance Similarity Modeling for Contrastive Learning」,主要用于解决现有对比学习方法在训练过程中忽略样本间相似关系…

力扣面试经典 150(下)

文章目录 二叉树的层次遍历82. 二叉树的右视图83. 二叉树的层平均值84. 二叉树的层序遍历85. 二叉树的锯齿形层序遍历 二叉搜索树86. 二叉搜索树的最小绝对差87. 二叉搜索树中第K 小的元素88. 验证二叉搜索树 图89. 岛屿数量90. 被围绕的区域91. 克隆图92. 除法求值93. 课程表9…

Web3的核心技术:区块链如何确保信息安全与共享

在互联网不断迭代的进程中,Web3被视为下一代互联网的核心发展方向,其目标是构建更加开放、安全、去中心化的数字生态。在这一过程中,区块链作为核心技术,为信息安全与共享提供了全新解决方案。本文将深入探讨区块链如何在Web3中实…

Leetcode 生命游戏

以下是上述Java代码的算法思想及其逻辑的中文解释: 算法思想 这段代码实现了LeetCode第289题“生命游戏”的解决方案。核心思想是: 利用原地修改的方式(in-place)存储下一状态的变化: 通过引入额外的状态值&#xff0…

JavaScript 中 arguments、类数组与数组的深入解析

博客主页: [小ᶻZ࿆] 本文专栏: 前端 文章目录 💯前言💯什么是 arguments 对象2.1 arguments 的定义2.2 arguments 的特性2.3 使用场景 💯深入了解 arguments 的结构3.1 arguments 的内部结构arguments 的关键属性 3.2 类数组…

设计模式-创建型-抽象工厂模式

1.概念 工厂方法模式只能生产一个产品系列,抽象工厂可以生产多个产品系列 2.作用 多个具体产品组成一个产品族(产品系列),一个具体工厂负责生产一个产品族 3.应用场景 系统所需产品间由依赖关系,可以划分为同一产…

结合第三方模块requests,文件IO、正则表达式,通过函数封装爬虫应用采集数据

#引用BeautifulSoup更方便提取html信息;requests模块,发生http请求;os模块,文件写入import requests from bs4 import BeautifulSoup import os#当使用requests库发送请求时,如果不设置User - Agent,默认的…

操作系统基础——针对实习面试

目录 操作系统基础什么是操作系统?简述其主要功能请举例几种不同类型的操作系统,并简要说明它们的特点 操作系统基础 什么是操作系统?简述其主要功能 一、操作系统的定义 操作系统(Operating System,简称OS&#xff…

深度学习基础练习:代码复现transformer重难点

2024/11/10-2024/11/18: 主要对transformer一些比较难理解的点做了一些整理,希望对读者有所帮助。 前置知识: 深度学习基础练习:从pytorch API出发复现LSTM与LSTMP-CSDN博客 【神经网络】学习笔记十四——Seq2Seq模型-CSDN博客 【官方双语】一…

ESLint的简单使用(js,ts,vue)

一、ESLint介绍 1.为什么要用ESLint 统一团队编码规范(命名,格式等) 统一语法 减少git不必要的提交 减少低级错误 在编译时检查语法,而不是等js引擎运行时才检查 2.eslint用法 可以手动下载配置 可以通过vue脚手架创建项…

探索PDFMiner:Python中的PDF解析利器

文章目录 **探索PDFMiner:Python中的PDF解析利器**1. 背景介绍:为何选择PDFMiner?2. PDFMiner是什么?3. 如何安装PDFMiner?4. 简单库函数使用方法4.1 提取文本4.2 获取页面布局信息4.3 提取表格数据4.4 提取图像 5. 应…

徒手从零搭建一套ELK日志平台

徒手从零搭建一套ELK日志平台 日志分析的概述日志分析的作用主要收集工具集中式日志系统主要特点采集日志分类ELK概述初级版ELK终极版ELK高级版ELKELK收集日志的两种形式 搭建ELK平台Logstash工作原理Logstash核心概念环境准备安装部署docker添加镜像加速器安装部署Elasticsear…

02 —— Webpack 修改入口和出口

概念 | webpack 中文文档 | webpack中文文档 | webpack中文网 修改入口 webpack.config.js (放在项目根目录下) module.exports {//entry设置入口起点的文件路径entry: ./path/to/my/entry/file.js, }; 修改出口 webpack.config.js const path r…