xmake的工程描述文件,摈弃了makefile的繁琐复杂,借鉴了premake的简洁明了,原生支持lua脚本,使得更加的灵活、方便扩展。
工程默认描述文件名为xmake.lua,支持多级目录嵌套,也可以通过以下命令,指定其他文件作为工程描述文件:
bash
xmake -f /tmp/xxx.lua
xmake --file=xxx.lua
下面先来看一个最简单的例子:
```lua
-- 添加一个名为demo的目标到工程
target("demo")
-- 设置目标程序类型为二进制可执行程序,一般为console的终端命令行程序
set_kind("binary")
继续阅读 »
描述语法
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
继续阅读 »
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
继续阅读 »
最近对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
继续阅读 »
xmake的工程描述文件xmake.lua虽然基于lua语法,但是为了使得更加方便简洁得编写项目构建逻辑,xmake对其进行了一层封装,使得编写xmake.lua不会像些makefile那样繁琐
基本上写个简单的工程构建描述,只需三行就能搞定,例如:
lua
target("test")
set_kind("binary")
add_files("src/*.c")
然后只需要执行编译并且运行它:
bash
$ xmake run test
这对于想要临时写些测试代码来讲,极大地提升了开发效率。。
作用域与工程描述语法
xmake的描述语法是按作用域划分的,主要分为:
外部作用域
内部作用域
继续阅读 »
概述
此版本重构了整个xmake,使得xmake更加方便地进行多语言扩展,并且在之前原有的构建语言支持上,新增了对golang, dlang 和 rust 程序构建支持。
并且重写了所有文档,提供更加详细完整的接口手册和文档支持:新版文档
License也从之前的LGPLv2.1改为Apache License 2.0,更加详细的改进请看下面详细描述:
新特性
添加--links, --linkdirs and --includedirs 配置参数
添加app2ipa插件
为xmake.lua工程描述增加dictionay语法风格
提供智能扫描编译模式,在无任何xmake.lua等工程描述文件的情况下,也能直接快速编译
为
继续阅读 »
xmake 在构建程序的时候,会去自动检测系统环境,工程描述等来创建最合适的编译配置来进行编译。。
一般情况下,我们只需要执行:
bash
$ xmake
就行了,并且如果工程描述没有改变,就不会去重新检测和生成配置。。
但是有时候,我们的编译需求千奇百怪,不可能一行xmake就能完全满足我们的需求,例如:我要在macosx上编译android程序了,怎么办
这个时候就需要手动修改配置:
bash
$ xmake f -p android --ndk=~/file/android-ndk
上面是简写,这样会少敲些字符,如果要可读性更好些,可以写全:
bash
$ xmake config --plat=andro
继续阅读 »
最近给xmake增加了一个新特性,对于一份工程源码,可以不用编写makefile,也不用编写各种make相关的工程描述文件(例如:xmake.lua,makefile.am, cmakelist.txt等)
xmake就可以直接编译他们,这是如何做到的呢,简单来说下实现原理:
首先扫描当前目录下,xmake所以支持的所有源代码文件
分析代码,检测哪些代码拥有main入口函数
所有没有main入口的代码编译成静态库
带有main入口的代码,编译成可执行程序,同时链接其他静态库程序
这种代码扫描和智能编译,非常简单,目前xmake还不支持多级目录扫描,只对单级目录的代码进行扫描编译。。
开源代码的移植和编译
虽然这种方式,并不是
继续阅读 »
如果你看了工程描述入门,那么是否觉得通过 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的风格,但是又对其进行了改善和增强。
使得不
继续阅读 »
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
继续阅读 »