2016-02-03 ruki
xmake的工程描述文件,摈弃了makefile的繁琐复杂,借鉴了premake的简洁明了,原生支持lua脚本,使得更加的灵活、方便扩展。 工程默认描述文件名为xmake.lua,支持多级目录嵌套,也可以通过以下命令,指定其他文件作为工程描述文件: bash xmake -f /tmp/xxx.lua xmake --file=xxx.lua 下面先来看一个最简单的例子: ```lua -- 添加一个名为demo的目标到工程 target("demo") -- 设置目标程序类型为二进制可执行程序,一般为console的终端命令行程序 set_kind("binary") 继续阅读 »
2017-04-05 ruki
描述语法 xmake的描述语法基于lua实现,因此描述语法继承了lua的灵活性和简洁性,并且通过28原则,将描述作用域(简单描述)、脚本作用域(复杂描述)进行分离,使得工程更加的简洁直观,可读性非常好。 因为80%的工程,并不需要很复杂的脚本控制逻辑,只需要简单的几行配置描述,就可满足构建需求,基于这个假设,xmake分离作用域,使得80%的xmake.lua文件,只需要这样描述: lua target("demo") set_kind("binary") add_files("src/*.c") 而仅有的20%的工程,才需要这样描述: ```lua target("demo") set_kind 继续阅读 »
2016-07-23 ruki
xmake 提供了一些内置的条件判断api,用于在选择性编译时,获取到一些工程状态的相关信息,来调整编译逻辑。。 例如:is_os, is_plat, is_arch, is_kind, is_mode, is_option is_mode 我们先拿最常用的is_mode来讲讲如何使用,这个api主要用来判断当前的编译模式,例如平常编译配置的时候,会执行: bash $ xmake f -m debug $ xmake 来编译debug版本,那么模式就是debug,那么release版本,也就是release了 bash $ xmake f -m release $ xmake 但是如果仅仅只是这么配置,xmake 继续阅读 »
2016-11-15 ruki
最近对xmake.lua的工程描述语法进行了增强,现已可以同时支持两种不同语法风格。 set-add描述风格 key-val描述风格 set-add描述风格 这种是xmake经典的设置风格,例如: lua target("test") set_kind("static") add_defines("DEBUG") add_files("src/*.c", "test/*.cpp") 优势:控制灵活,可以根据各种条件,通过if-then进行灵活的条件编译,可以驾驭各种高度复杂的配置需求。 劣势:作用域控制不明显,需要手动规范化缩进 key-val描述风格 这种是xmake最近新加的风格,例如: l 继续阅读 »
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-03-04 ruki
概述 此版本重构了整个xmake,使得xmake更加方便地进行多语言扩展,并且在之前原有的构建语言支持上,新增了对golang, dlang 和 rust 程序构建支持。 并且重写了所有文档,提供更加详细完整的接口手册和文档支持:新版文档 License也从之前的LGPLv2.1改为Apache License 2.0,更加详细的改进请看下面详细描述: 新特性 添加--links, --linkdirs and --includedirs 配置参数 添加app2ipa插件 为xmake.lua工程描述增加dictionay语法风格 提供智能扫描编译模式,在无任何xmake.lua等工程描述文件的情况下,也能直接快速编译 为 继续阅读 »
2016-07-19 ruki
xmake 在构建程序的时候,会去自动检测系统环境,工程描述等来创建最合适的编译配置来进行编译。。 一般情况下,我们只需要执行: bash $ xmake 就行了,并且如果工程描述没有改变,就不会去重新检测和生成配置。。 但是有时候,我们的编译需求千奇百怪,不可能一行xmake就能完全满足我们的需求,例如:我要在macosx上编译android程序了,怎么办 这个时候就需要手动修改配置: bash $ xmake f -p android --ndk=~/file/android-ndk 上面是简写,这样会少敲些字符,如果要可读性更好些,可以写全: bash $ xmake config --plat=andro 继续阅读 »
2017-01-07 ruki
最近给xmake增加了一个新特性,对于一份工程源码,可以不用编写makefile,也不用编写各种make相关的工程描述文件(例如:xmake.lua,makefile.am, cmakelist.txt等) xmake就可以直接编译他们,这是如何做到的呢,简单来说下实现原理: 首先扫描当前目录下,xmake所以支持的所有源代码文件 分析代码,检测哪些代码拥有main入口函数 所有没有main入口的代码编译成静态库 带有main入口的代码,编译成可执行程序,同时链接其他静态库程序 这种代码扫描和智能编译,非常简单,目前xmake还不支持多级目录扫描,只对单级目录的代码进行扫描编译。。 开源代码的移植和编译 虽然这种方式,并不是 继续阅读 »
2016-02-04 ruki
如果你看了工程描述入门,那么是否觉得通过 add_files 添加源文件相当的方便? 目前它可以支持.c/.cpp/.s/.S/.m/.mm/.o/.obj/.a/.lib这些后缀的源代码和库文件,其中通配符表示匹配当前目录下文件,而*则匹配多级目录下的文件。 例如: lua add_files("src/test_*.c") add_files("src/xxx/**.cpp") add_files("src/asm/*.S", "src/objc/**/hello.m") add_files的使用其实是相当灵活方便的,其匹配模式我借鉴了premake的风格,但是又对其进行了改善和增强。 使得不 继续阅读 »
2016-08-29 ruki
xmake master上最新版本已经支持vs2002-vs2015工程文件的生成,通过project插件的方式提供,例如: 创建vs2013工程文件: bash $ xmake project -k vs2013 默认输出目录是在当前工程的下面,会生成一个vs2008的工程文件夹,打开解决方案编译后,默认的输出文件路径跟xmake.lua描述的是完全一致的,一般都是在build目录下 除非你手动指定其他的构建目录,例如:xmake f -o /tmp/build 创建vs2008工程文件,并且创建工程文件到指定目录: bash $ xmake project -k vs2008 f:\vsproject 继续阅读 »