IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    内置变量与原生shell脚本运行

    waruqi发表于 2016-07-19 11:42:15
    love 0

    xmake在xmake.lua中提供了 $(varname) 的语法,来支持内置变量的获取,例如:

    add_cxflags("-I$(buildir)")

    它将会在在实际编译的时候,将内置的 buildir 变量转换为实际的构建输出目录:-I./build

    并且这些变量在自定义脚本中,也是可以支持的,例如:

    target("test")
        after_build(target)
            print("build ok for $(plat)!")
        end

    这将会在编译完后,输出:

    build ok for macosx!

    这些内置变量,大部分都是通过配置的时候,缓存的配置参数中获取,例如:

    $ xmake config --plat=macosx

    也有些内置变量,不需要通过配置中获取到,例如:

    print("$(os)")
    print("$(host)")
    print("$(tmpdir)")
    print("$(curdir)")

    等等,这些都是为了让xmake的语法更加简洁,例如操作文件复制的时候,只需要:

    os.cp("$(projectdir)/file", "$(tmpdir)")

    而不需要:

    -- 导入工程模块
    import("core.project.project")
    
    -- 复制文件
    os.cp(path.join(project.directory(), "file"), os.tmpdir())

    这样比较繁琐下,但是有些复杂功能,可能还是得这么处理比较灵活,这就得看具体需求了。。

    除了内置的变量处理,xmake还支持原生shell的运行,来处理一些xmake内置不支持的功能

    例如,现在有个需求,我想用在编译linux程序时,调用pkg-config获取到实际的第三方链接库名,可以这么做:

    target("test")
        set_kind("binary")
        if is_plat("linux") then
            add_ldflags("$(shell pkg-config --libs sqlite3)")
        end

    当然,xmake有自己的自动化第三库检测机制,一般情况下不需要这么麻烦,而且lua自身的脚本化已经很不错了。。

    但是这个例子可以说明,xmake是完全可以通过原生shell,来与一些第三方的工具进行配合使用。。


    • XMake项目主页

    • XMake项目详情

    • XMake项目源码

    • XMake项目文档



沪ICP备19023445号-2号
友情链接