2016-10-26 ruki
xmake的工程描述文件xmake.lua虽然基于lua语法,但是为了使得更加方便简洁得编写项目构建逻辑,xmake对其进行了一层封装,使得编写xmake.lua不会像些makefile那样繁琐 基本上写个简单的工程构建描述,只需三行就能搞定,例如: lua target("test") set_kind("binary") add_files("src/*.c") 然后只需要执行编译并且运行它: bash $ xmake run test 这对于想要临时写些测试代码来讲,极大地提升了开发效率。。 作用域与工程描述语法 xmake的描述语法是按作用域划分的,主要分为: 外部作用域 内部作用域 继续阅读 »
2017-08-10 ruki
之前的版本对编译控制粒度,只能到target这一级: ```lua -- 全局根配置,所有target都会被影响 add_defines("ROOT") target("test") -- target目标配置,只对test目标下的所有源文件编译生效 add_defines("TEST") add_files("src/*.c") ``` 最近给2.1.6开发版本中的add_files进行了改进,支持基于files更细粒度的编译选项控制,例如: lua target("test") add_defines("TEST1") add_files("src/*.c") add_files("test/* 继续阅读 »
2017-01-07 ruki
最近给xmake增加了一个新特性,对于一份工程源码,可以不用编写makefile,也不用编写各种make相关的工程描述文件(例如:xmake.lua,makefile.am, cmakelist.txt等) xmake就可以直接编译他们,这是如何做到的呢,简单来说下实现原理: 首先扫描当前目录下,xmake所以支持的所有源代码文件 分析代码,检测哪些代码拥有main入口函数 所有没有main入口的代码编译成静态库 带有main入口的代码,编译成可执行程序,同时链接其他静态库程序 这种代码扫描和智能编译,非常简单,目前xmake还不支持多级目录扫描,只对单级目录的代码进行扫描编译。。 开源代码的移植和编译 虽然这种方式,并不是 继续阅读 »
2016-07-18 ruki
xmake默认情况下是不会去生成pdb文件,就算是debug编译,启用了调试符号: lua set_symbols("debug") 也是不会生成额外的pdb文件,它会把所有调试符号内置到程序里面,如果要独立生成pdb文件,可以对xmake.lua进行如下修改: ```lua -- 先禁用内置的调试符号开关 --set_symbols("debug") -- 静态库目标 target("test") set_kind("static") -- 仅针对windows平台 if is_plat("windows") then -- 启用pdb生成 add_cxflags("-ZI", "-Fd$(bui 继续阅读 »
2016-08-07 ruki
xmake还可以支持一些自定义选项开关,使得工程支持可选编译,方便工程的模块化管理。 增加自定义编译开关 我们拿一个实际的例子来说: 我们想在自己的工程中增加一个新开关选项:hello, 如果这个开关被启用,会在target中添加特定的一些源码文件,但是这个开挂默认是不被启用的,需要通过配置xmake f --hello=true才会被链接和使用 并且使用的时候,需要定义一些特殊的宏定义:-DHELLO_TEST -DHELLO_ENABLE 那么我们开始进行xmake.lua修改,过程并不复杂: 在xmake.lua的头部通过option接口定义一个名叫hello的开关选项 ```lua --定义一个名叫hello的 继续阅读 »
2017-10-25 ruki
xmake-sublime plugin is a xmake integration in Sublime Text. It is deeply integrated with xmake and sublime text to provide a convenient and fast cross-platform c/c++ development and building. You need install xmake first and a project with xmake.lua. Features Quickstart Colorization Completion Lists StatusBar Comm 继续阅读 »
2017-11-13 ruki
在2.1.9版本之后,xmake不仅原生内置支持多种语言文件的构建,而且还可以通过自定义构建规则,让用户自己来实现复杂的未知文件构建。 具体使用介绍,可参考相关文档:rule规则使用手册 通用规则 我们可以通过预先设置规则支持的文件后缀,来扩展其他文件的构建支持: ```lua -- 定义一个markdown文件的构建规则 rule("markdown") set_extensions(".md", ".markdown") on_build(function (target, sourcefile) os.cp(sourcefile, path.join(target:targetdir() 继续阅读 »
2017-07-29 ruki
find_package This interface refers to the design of CMake for the find_* interfaces, which finds and adds package dependencies in the project target. lua target("test") set_kind("binary") add_files("*.c") on_load(function (target) import("lib.detect.find_package") target:add(find_package(" 继续阅读 »
2017-04-02 ruki
概述 此次更新,主要修复xmake的一些稳定性问题,并且对安装和卸载提供更加安全的权限处理,相关更新细节见:改进权限问题,提升操作安全性 并且此版本还对用户使用上的体验进行了一些优化,例如: 减少冗余检测和提示信息,提升检测效率 在非xmake工程自动生成xmake.lua时提供更加友好的提示,避免误操作 在任意工程子目录也可正常执行xmake操作,类似git 提供更加安全友好的安装和卸载提示信息 详细更新信息,可参考下面的更新细节: 新特性 #65: 为target添加set_default接口用于修改默认的构建所有targets行为 允许在工程子目录执行xmake命令进行构建,xmake会自动检测所在的工程根目录 继续阅读 »
2016-06-09 ruki
我们继续以之前讲解的hello插件为基础,现在为其增加参数配置选项,并且指定一个独立的脚本文件中进行开发,这样我们就可以写一些更复杂的插件 ```lua -- 定义一个名叫hello的插件任务 task("hello") -- 设置类型为插件 set_category("plugin") -- 插件运行的入口,这里指定main,说明从当前插件目录的main.lua脚本中加载插件入口 on_run("main") -- 设置插件的命令行选项,这里没有任何参数选项,仅仅显示插件描述 set_menu({ -- usage 继续阅读 »