xmake的工程描述文件xmake.lua虽然基于lua语法,但是为了使得更加方便简洁得编写项目构建逻辑,xmake对其进行了一层封装,使得编写xmake.lua不会像些makefile那样繁琐
基本上写个简单的工程构建描述,只需三行就能搞定,例如:
lua
target("test")
set_kind("binary")
add_files("src/*.c")
然后只需要执行编译并且运行它:
bash
$ xmake run test
这对于想要临时写些测试代码来讲,极大地提升了开发效率。。
作用域与工程描述语法
xmake的描述语法是按作用域划分的,主要分为:
外部作用域
内部作用域
继续阅读 »
之前的版本对编译控制粒度,只能到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/*
继续阅读 »
最近给xmake增加了一个新特性,对于一份工程源码,可以不用编写makefile,也不用编写各种make相关的工程描述文件(例如:xmake.lua,makefile.am, cmakelist.txt等)
xmake就可以直接编译他们,这是如何做到的呢,简单来说下实现原理:
首先扫描当前目录下,xmake所以支持的所有源代码文件
分析代码,检测哪些代码拥有main入口函数
所有没有main入口的代码编译成静态库
带有main入口的代码,编译成可执行程序,同时链接其他静态库程序
这种代码扫描和智能编译,非常简单,目前xmake还不支持多级目录扫描,只对单级目录的代码进行扫描编译。。
开源代码的移植和编译
虽然这种方式,并不是
继续阅读 »
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
继续阅读 »
xmake还可以支持一些自定义选项开关,使得工程支持可选编译,方便工程的模块化管理。
增加自定义编译开关
我们拿一个实际的例子来说:
我们想在自己的工程中增加一个新开关选项:hello, 如果这个开关被启用,会在target中添加特定的一些源码文件,但是这个开挂默认是不被启用的,需要通过配置xmake f --hello=true才会被链接和使用
并且使用的时候,需要定义一些特殊的宏定义:-DHELLO_TEST -DHELLO_ENABLE
那么我们开始进行xmake.lua修改,过程并不复杂:
在xmake.lua的头部通过option接口定义一个名叫hello的开关选项
```lua
--定义一个名叫hello的
继续阅读 »
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
继续阅读 »
在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()
继续阅读 »
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("
继续阅读 »
概述
此次更新,主要修复xmake的一些稳定性问题,并且对安装和卸载提供更加安全的权限处理,相关更新细节见:改进权限问题,提升操作安全性
并且此版本还对用户使用上的体验进行了一些优化,例如:
减少冗余检测和提示信息,提升检测效率
在非xmake工程自动生成xmake.lua时提供更加友好的提示,避免误操作
在任意工程子目录也可正常执行xmake操作,类似git
提供更加安全友好的安装和卸载提示信息
详细更新信息,可参考下面的更新细节:
新特性
#65: 为target添加set_default接口用于修改默认的构建所有targets行为
允许在工程子目录执行xmake命令进行构建,xmake会自动检测所在的工程根目录
继续阅读 »
我们继续以之前讲解的hello插件为基础,现在为其增加参数配置选项,并且指定一个独立的脚本文件中进行开发,这样我们就可以写一些更复杂的插件
```lua
-- 定义一个名叫hello的插件任务
task("hello")
-- 设置类型为插件
set_category("plugin")
-- 插件运行的入口,这里指定main,说明从当前插件目录的main.lua脚本中加载插件入口
on_run("main")
-- 设置插件的命令行选项,这里没有任何参数选项,仅仅显示插件描述
set_menu({
-- usage
继续阅读 »