当前位置: 首页 > news >正文

xmake 工程描述语法更新

为什么80%的码农都做不了架构师?>>>   hot3.png

最近对xmake.lua的工程描述语法进行了增强,现已可以同时支持两种不同语法风格。

  • set-add描述风格
  • key-val描述风格

set-add描述风格

这种是xmake经典的设置风格,例如:

target("test")
    set_kind("static")
    add_defines("DEBUG")
    add_files("src/*.c", "test/*.cpp")
  • 优势:控制灵活,可以根据各种条件,通过if-then进行灵活的条件编译,可以驾驭各种高度复杂的配置需求。
  • 劣势:作用域控制不明显,需要手动规范化缩进

key-val描述风格

这种是xmake最近新加的风格,例如:

target
{
    name = "test",
    defines = "DEBUG",
    files = {"src/*.c", "test/*.cpp"}
}
  • 优势:更加的精简可读
  • 劣势:条件编译虽然也支持,但是不太灵活

这两种风格,目前xmake都是同时兼容支持的,可以根据个人喜好,随意使用,但是这边的建议是:

  • 针对简单的工程,不需要太过复杂的条件编译,可以使用key-val方式,更加精简,可读性好
  • 针对复杂工程,需要更高的可控性,和灵活性的话,建议使用set-add方式
  • 尽量不要两种风格混着写,虽然是支持的,但是这样对整个工程描述会感觉很乱,因此尽量统一风格作为自己的描述规范

另外,不仅对target,像option, task, template都是支持两种方式设置的,例如:

-- set-add风格
option("demo")
    set_default(true)
    set_showmenu(true)
    set_category("option")
    set_description("Enable or disable the demo module", "    =y|n")

-- key-val风格
option
{
    name = "demo",
    default = true,
    showmenu = true,
    category = "option",
    desciption = {"Enable or disable the demo module", "    =y|n"}
}

自定义的任务或者插件可以这么写:

-- set-add风格
task("hello")

    -- on run
    on_run(function ()

        -- trace
        print("hello xmake!")

    end)

    -- set menu
    set_menu({
                    -- usage
                    usage = "xmake hello [options]"

                    -- description
                ,   description = "Hello xmake!"

                    -- options
                ,   options = {}
                }) 

-- key-val风格
task
{
    name = "hello",
    run = (function ()

        -- trace
        print("hello xmake!")

    end),
    menu = {
                -- usage
                usage = "xmake hello [options]"

                -- description
            ,   description = "Hello xmake!"

                -- options
            ,   options = {}
            }
}

个人主页:TBOOX开源工程

转载于:https://my.oschina.net/tboox/blog/789056

相关文章:

  • 2 unit 9
  • mysql编程--创建函数出错的解决方案
  • 什么场景应该用 MongoDB ?
  • NFS的常用挂载参数
  • Ubuntu 14.04 网卡逻辑名修改
  • dos.orm的事务处理
  • log4j2基本操作
  • docker-gitlab
  • 让mysqldump变成并发导出导入的魔法
  • kafka术语
  • 《深入 React 技术栈》
  • 聊聊 Redis 使用场景
  • 四: 基本标签
  • 离线安装 Python 2.7, paramiko 和 tornado
  • 线程组
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 2017 年终总结 —— 在路上
  • echarts的各种常用效果展示
  • mysql中InnoDB引擎中页的概念
  • Otto开发初探——微服务依赖管理新利器
  • SAP云平台里Global Account和Sub Account的关系
  • socket.io+express实现聊天室的思考(三)
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • zookeeper系列(七)实战分布式命名服务
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 技术胖1-4季视频复习— (看视频笔记)
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 悄悄地说一个bug
  • 微信支付JSAPI,实测!终极方案
  • 正则与JS中的正则
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • ionic异常记录
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • ​configparser --- 配置文件解析器​
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​用户画像从0到100的构建思路
  • #微信小程序(布局、渲染层基础知识)
  • (ZT)出版业改革:该死的死,该生的生
  • (二)windows配置JDK环境
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (译)2019年前端性能优化清单 — 下篇
  • (转)setTimeout 和 setInterval 的区别
  • (转)大型网站的系统架构
  • .htaccess配置重写url引擎
  • .NET Core 2.1路线图
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET/C# 使用反射注册事件
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NetCore部署微服务(二)
  • .net程序集学习心得
  • .NET运行机制
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @EnableWebMvc介绍和使用详细demo