581 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			581 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# API
 | 
						||
 | 
						||
[链接](https://www.bookstack.cn/read/xmake/manual-project_target.md)
 | 
						||
 | 
						||
`api("param1","param2",...,dict_prop)`
 | 
						||
 | 
						||
`on_script("dir.file") || on_script(function(...) end)  `
 | 
						||
 | 
						||
## [命名规范](https://www.bookstack.cn/read/xmake/manual-specification.md)
 | 
						||
 | 
						||
接口的命名,是有按照预定义的一些规范来命名的,这样更加方便理解和易于使用,目前命名按照如下一些规则:
 | 
						||
 | 
						||
| 接口规则                | 描述                                                         |
 | 
						||
| ----------------------- | ------------------------------------------------------------ |
 | 
						||
| `is_`, `has_`前缀的接口 | 表示为条件判断                                               |
 | 
						||
| `set_`前缀的接口        | 表示为覆盖设置                                               |
 | 
						||
| `add_`前缀的接口        | 表示为追加设置                                               |
 | 
						||
| `s`后缀的接口           | 表示支持多值传入,例如:`add_files("*.c", "test.cpp")`       |
 | 
						||
| `on_`前缀的接口         | 表示为覆盖内置脚本                                           |
 | 
						||
| `before_`前缀的接口     | 表示为在内置脚本运行前,执行此脚本                           |
 | 
						||
| `after_`前缀的接口      | 表示为在内置脚本运行后,执行此脚本                           |
 | 
						||
| `scope("name")`的接口   | 表示为定义一个描述域,例如:`target("xxx")`, `option("xxx")` |
 | 
						||
| 描述域/描述设置         | 建议缩进表示                                                 |
 | 
						||
 | 
						||
## [条件判断](https://www.bookstack.cn/read/xmake/manual-conditions.md)
 | 
						||
 | 
						||
条件判断的api,一般用于必须要处理特定平台的编译逻辑的场合。。通常跟lua的if语句配合使用。
 | 
						||
 | 
						||
| 接口                                                         | 描述                         | 支持版本                |
 | 
						||
| ------------------------------------------------------------ | ---------------------------- | ----------------------- |
 | 
						||
| [is_os](https://www.bookstack.cn/read/xmake/manual-conditions.md#is_os) | 判断当前构建目标的操作系统   | >= 2.0.1                |
 | 
						||
| [is_arch](https://www.bookstack.cn/read/xmake/manual-conditions.md#is_arch) | 判断当前编译架构             | >= 2.0.1                |
 | 
						||
| [is_plat](https://www.bookstack.cn/read/xmake/manual-conditions.md#is_plat) | 判断当前编译平台             | >= 2.0.1                |
 | 
						||
| [is_host](https://www.bookstack.cn/read/xmake/manual-conditions.md#is_host) | 判断当前主机环境操作系统     | >= 2.1.4                |
 | 
						||
| [is_mode](https://www.bookstack.cn/read/xmake/manual-conditions.md#is_mode) | 判断当前编译模式             | >= 2.0.1                |
 | 
						||
| [is_kind](https://www.bookstack.cn/read/xmake/manual-conditions.md#is_kind) | 判断当前编译类型             | >= 2.0.1                |
 | 
						||
| [is_option](https://www.bookstack.cn/read/xmake/manual-conditions.md#is_option) | 判断选项是否启用             | >= 2.0.1 < 2.2.2 已废弃 |
 | 
						||
| [is_config](https://www.bookstack.cn/read/xmake/manual-conditions.md#is_config) | 判断指定配置是否为给定的值   | >= 2.2.2                |
 | 
						||
| [has_config](https://www.bookstack.cn/read/xmake/manual-conditions.md#has_config) | 判断配置是否启用或者存在     | >= 2.2.2                |
 | 
						||
| [has_package](https://www.bookstack.cn/read/xmake/manual-conditions.md#has_package) | 判断依赖包是否被启用或者存在 | >= 2.2.3                |
 | 
						||
 | 
						||
## 特殊字符
 | 
						||
 | 
						||
### 正则表达式
 | 
						||
 | 
						||
```lua
 | 
						||
-- 递归添加src下的所有c文件,但是不包括src/impl/下的所有c文件
 | 
						||
add_files("src/**.c|impl/*.c")
 | 
						||
 | 
						||
-- 添加src下的所有cpp文件,但是不包括src/test.cpp、src/hello.cpp以及src下所有带xx_前缀的cpp文件
 | 
						||
add_files("src/*.cpp|test.cpp|hello.cpp|xx_*.cpp")
 | 
						||
 | 
						||
-- 批量导入配置文件
 | 
						||
includes("test/**/xmake.lua")
 | 
						||
```
 | 
						||
 | 
						||
 | 
						||
 | 
						||
### [内置变量](https://www.bookstack.cn/read/xmake/manual-builtin_variables.md)
 | 
						||
 | 
						||
```lua
 | 
						||
target("test")
 | 
						||
 | 
						||
    -- 添加工程源码目录下的源文件
 | 
						||
    add_files("$(projectdir)/src/*.c")
 | 
						||
 | 
						||
    -- 添加构建目录下的头文件搜索路径
 | 
						||
    add_includedirs("$(buildir)/inc")
 | 
						||
```
 | 
						||
 | 
						||
 | 
						||
 | 
						||
| 接口                                                         | 描述                        | 支持版本 |
 | 
						||
| ------------------------------------------------------------ | --------------------------- | -------- |
 | 
						||
| [$(os)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varos) | 获取当前编译平台的操作系统  | >= 2.0.1 |
 | 
						||
| [$(host)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varhost) | 获取本机操作系统            | >= 2.0.1 |
 | 
						||
| [$(tmpdir)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#vartmpdir) | 获取临时目录                | >= 2.0.1 |
 | 
						||
| [$(curdir)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varcurdir) | 获取当前目录                | >= 2.0.1 |
 | 
						||
| [$(buildir)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varbuildir) | 获取构建输出目录            | >= 2.0.1 |
 | 
						||
| [$(scriptdir)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varscriptdir) | 获取工程描述脚本目录        | >= 2.1.1 |
 | 
						||
| [$(globaldir)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varglobaldir) | 获取全局配置目录            | >= 2.0.1 |
 | 
						||
| [$(configdir)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varconfigdir) | 获取本地工程配置目录        | >= 2.0.1 |
 | 
						||
| [$(programdir)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varprogramdir) | xmake安装脚本目录           | >= 2.1.5 |
 | 
						||
| [$(projectdir)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varprojectdir) | 获取工程根目录              | >= 2.0.1 |
 | 
						||
| [$(shell)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varshell) | 执行外部shell命令           | >= 2.0.1 |
 | 
						||
| [$(env)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varenv) | 获取外部环境变量            | >= 2.1.5 |
 | 
						||
| [$(reg)](https://xmake.io/mirror/zh-cn/manual/builtin_variables.html#varreg) | 获取windows注册表配置项的值 | >= 2.1.5 |
 | 
						||
 | 
						||
## 模块接口
 | 
						||
 | 
						||
### [内置模块](https://www.bookstack.cn/read/xmake/manual-builtin_modules.md)
 | 
						||
 | 
						||
### [扩展模块](https://www.bookstack.cn/read/xmake/manual-extension_modules.md)
 | 
						||
 | 
						||
### 常用接口
 | 
						||
 | 
						||
- import
 | 
						||
- includes
 | 
						||
 | 
						||
## 测试
 | 
						||
 | 
						||
```lua
 | 
						||
  
 | 
						||
on_test(function (package)
 | 
						||
    assert(package:has_cxxfuncs("func1", {includes = "xxx.h", configs = {defines = "c++14", cxflags = "-Dxxx"}}))
 | 
						||
end)
 | 
						||
 | 
						||
on_test(function (package)
 | 
						||
    assert(package:check_cxxsnippets({test = [[
 | 
						||
            #include <boost/algorithm/string.hpp>
 | 
						||
            #include <string>
 | 
						||
            #include <vector>
 | 
						||
            #include <assert.h>
 | 
						||
            using namespace boost::algorithm;
 | 
						||
            using namespace std;
 | 
						||
            static void test() {
 | 
						||
                string str("a,b");
 | 
						||
                vector<string> strVec;
 | 
						||
                split(strVec, str, is_any_of(","));
 | 
						||
                assert(strVec.size()==2);
 | 
						||
                assert(strVec[0]=="a");
 | 
						||
                assert(strVec[1]=="b");
 | 
						||
            }
 | 
						||
        ]]}, {configs = {languages = "c++14"}}))
 | 
						||
    end)
 | 
						||
```
 | 
						||
 | 
						||
 | 
						||
 | 
						||
# 项目配置
 | 
						||
 | 
						||
## [config.lua](https://www.bookstack.cn/read/xmake/guide-configuration.md)
 | 
						||
 | 
						||
相当于命令行配置,优先级最高
 | 
						||
 | 
						||
### 类型
 | 
						||
 | 
						||
本地配置会覆盖全局配置
 | 
						||
 | 
						||
- 全局配置
 | 
						||
  - 所有项目生效
 | 
						||
- 本地配置
 | 
						||
  - 本地项目生效
 | 
						||
 | 
						||
### 作用
 | 
						||
 | 
						||
- 设置编译选项
 | 
						||
- 设置环境变量
 | 
						||
- 设置项目配置
 | 
						||
 | 
						||
## xmake.lua
 | 
						||
 | 
						||
```lua
 | 
						||
-- 全局根作用域,影响所有target,包括includes() 中的子工程target设置
 | 
						||
add_defines("DEBUG")
 | 
						||
 | 
						||
option("test")
 | 
						||
	set_default(false)
 | 
						||
-- 显示结束作用域
 | 
						||
option_end()
 | 
						||
 | 
						||
-- 隐式结束上一个作用域
 | 
						||
target("demo")
 | 
						||
	set_kind("binary")
 | 
						||
	add_files("src/*.c")
 | 
						||
target_end()
 | 
						||
```
 | 
						||
 | 
						||
### 配置域
 | 
						||
 | 
						||
 `set_xxx`/`add_xxx`的配置集,用于静态的生成lua对象的属性集
 | 
						||
 | 
						||
配置域通过includes 导入子配置
 | 
						||
 | 
						||
配置文件在不同阶段会被多次解析 **会被执行多遍!**
 | 
						||
 | 
						||
- 配置里可以加入简单的逻辑判断
 | 
						||
- 沙盒环境,被禁止执行复杂操作(屏蔽接口)
 | 
						||
 | 
						||
### 描述域
 | 
						||
 | 
						||
命令行中的属性优先级最高,会影响到所有设置
 | 
						||
 | 
						||
进入另一个target/option域设置,会自动离开上个target/option域,但是有时候为了比较一些作用域污染情况,我们可以显示离开某个域
 | 
						||
 | 
						||
- 命令行
 | 
						||
- 配置域
 | 
						||
- 全局域
 | 
						||
- 范围域
 | 
						||
 | 
						||
### 脚本域
 | 
						||
 | 
						||
导入后就可以直接使用里面的所有公有接口,私有接口用`_`前缀标示,表明不会被导出,不会被外部调用到。
 | 
						||
 | 
						||
其中 main 为入口函数,可选,如果设置,模块 foo 可以直接被调用
 | 
						||
 | 
						||
- 在指定时机中执行复杂操作,只执行一遍
 | 
						||
- 脚本域中开放所有接口,可执行任何操作
 | 
						||
 | 
						||
#### on_link
 | 
						||
 | 
						||
```lua
 | 
						||
--定制化处理target的链接过程
 | 
						||
target("test")
 | 
						||
    on_link(function (target) 
 | 
						||
        print("link it")
 | 
						||
    end)
 | 
						||
```
 | 
						||
 | 
						||
#### on_build
 | 
						||
 | 
						||
```lua
 | 
						||
--[[
 | 
						||
覆盖target目标默认的构建行为,实现自定义的编译过程,
 | 
						||
一般情况下,并不需要这么做,除非确实需要做一些xmake默认没有提供的编译操作
 | 
						||
如果第一个参数为字符串,那么就是指定这个脚本需要在哪个平台|架构下,才会被执行
 | 
						||
]]
 | 
						||
target("test")
 | 
						||
    on_build("iphoneos|arm*", function (target)
 | 
						||
        print("build for iphoneos and arm")
 | 
						||
    end)
 | 
						||
```
 | 
						||
 | 
						||
#### on_build_file
 | 
						||
 | 
						||
```lua
 | 
						||
--通过此接口,可以用来hook指定target内置的构建过程,自己重新实现每个源文件编译过程
 | 
						||
target("test")
 | 
						||
    set_kind("binary")
 | 
						||
    add_files("src/*.c")
 | 
						||
    on_build_file(function (target, sourcefile, opt)
 | 
						||
    end)
 | 
						||
```
 | 
						||
 | 
						||
#### on_build_files
 | 
						||
 | 
						||
```lua
 | 
						||
--通过此接口,可以用来hook指定target内置的构建过程,替换一批同类型源文件编译过程:
 | 
						||
target("test")
 | 
						||
    set_kind("binary")
 | 
						||
    add_files("src/*.c")
 | 
						||
    on_build_files(function (target, sourcebatch, opt)
 | 
						||
    end)
 | 
						||
```
 | 
						||
 | 
						||
其中sourcebatch描述了这批同类型源文件:
 | 
						||
 | 
						||
- `sourcebatch.sourcekind`: 获取这批源文件的类型,比如:cc, as, ..
 | 
						||
- `sourcebatch.sourcefiles()`: 获取源文件列表
 | 
						||
- `sourcebatch.objectfiles()`: 获取对象文件列表
 | 
						||
- `sourcebatch.dependfiles()`: 获取对应依赖文件列表,存有源文件中编译依赖信息,例如:xxx.d
 | 
						||
 | 
						||
#### on_clean
 | 
						||
 | 
						||
```lua
 | 
						||
--覆盖target目标的xmake [c|clean}的清理操作,实现自定义清理过程。
 | 
						||
target("test")
 | 
						||
 | 
						||
    -- 设置自定义清理脚本
 | 
						||
    on_clean(function (target) 
 | 
						||
 | 
						||
        -- 仅删掉目标文件
 | 
						||
        os.rm(target:targetfile())
 | 
						||
    end)
 | 
						||
```
 | 
						||
 | 
						||
#### on_package
 | 
						||
 | 
						||
```lua
 | 
						||
--覆盖target目标的xmake [p|package}的打包操作,实现自定义打包过程,如果你想对指定target打包成自己想要的格式,可以通过这个接口自定义它
 | 
						||
target("demo")
 | 
						||
    set_kind("shared")
 | 
						||
    add_files("jni/*.c")
 | 
						||
    on_package(function (target) 
 | 
						||
        os.exec("./gradlew app:assembleDebug") 
 | 
						||
    end)
 | 
						||
```
 | 
						||
 | 
						||
#### on_install
 | 
						||
 | 
						||
```lua
 | 
						||
--覆盖target目标的xmake [i|install}的安装操作,实现自定义安装过程
 | 
						||
target("test")
 | 
						||
 | 
						||
    -- 设置自定义安装脚本,自动安装apk文件
 | 
						||
    on_install(function (target) 
 | 
						||
 | 
						||
        -- 使用adb安装打包生成的apk文件
 | 
						||
        os.run("adb install -r ./bin/Demo-debug.apk")
 | 
						||
    end)
 | 
						||
```
 | 
						||
 | 
						||
#### on_uninstall
 | 
						||
 | 
						||
```lua
 | 
						||
--覆盖target目标的xmake [u|uninstall}的卸载操作,实现自定义卸载过程
 | 
						||
target("test")
 | 
						||
    on_uninstall(function (target) 
 | 
						||
        ...
 | 
						||
    end)
 | 
						||
```
 | 
						||
 | 
						||
#### on_run
 | 
						||
 | 
						||
```lua
 | 
						||
--覆盖target目标的xmake [r|run}的运行操作,实现自定义运行过程。
 | 
						||
target("test")
 | 
						||
 | 
						||
    -- 设置自定义运行脚本,自动运行安装好的app程序,并且自动获取设备输出信息
 | 
						||
    on_run(function (target) 
 | 
						||
        os.run("adb shell am start -n com.demo/com.demo.DemoTest")
 | 
						||
        os.run("adb logcat")
 | 
						||
    end)
 | 
						||
```
 | 
						||
 | 
						||
#### on_link
 | 
						||
 | 
						||
```lua
 | 
						||
--定制化处理target的链接过程
 | 
						||
target("test")
 | 
						||
    on_link(function (target) 
 | 
						||
        print("link it")
 | 
						||
    end)
 | 
						||
```
 | 
						||
 | 
						||
#### 扩展事件
 | 
						||
 | 
						||
- before_xxx
 | 
						||
- after_xxx
 | 
						||
 | 
						||
target:on_xxx的所有接口都覆盖内部默认实现,通常我们并不需要完全复写,只是额外挂接自己的一些逻辑,那么可以使用`target:before_xxx`和`target:after_xxx`系列脚本就行了。
 | 
						||
 | 
						||
所有的on_xxx都有对应的before_和after_xx版本,参数也完全一致
 | 
						||
 | 
						||
## 文件拆分
 | 
						||
 | 
						||
文件间存在树形继承关系,当前文件目录为工作空间
 | 
						||
 | 
						||
### 配置域
 | 
						||
 | 
						||
配置域通过includes 导入子配置
 | 
						||
 | 
						||
- 拆分属性配置到多个文件
 | 
						||
- 支持批量导入
 | 
						||
 | 
						||
### 脚本域
 | 
						||
 | 
						||
不仅可以使用大部分lua的api,还可以使用很多xmake提供的扩展模块
 | 
						||
 | 
						||
所有扩展模块,通过import来导入
 | 
						||
 | 
						||
# [Target](https://www.bookstack.cn/read/xmake/manual-project_target.md)
 | 
						||
 | 
						||
- 项目属性配置
 | 
						||
- 项目间存在继承关系
 | 
						||
 | 
						||
## 项目配置
 | 
						||
 | 
						||
```lua
 | 
						||
-- 批量导入配置文件
 | 
						||
includes("test/**/xmake.lua")
 | 
						||
 | 
						||
target("test")
 | 
						||
    --  静态库 | 动态库 | 可执行程序
 | 
						||
    -- static | shared | binary
 | 
						||
    set_kind("binary")
 | 
						||
 | 
						||
	-- 源文件
 | 
						||
	add_files("src/*.cpp")
 | 
						||
    -- 删除指定文件
 | 
						||
    del_files("src/test.c")
 | 
						||
    -- 头文件
 | 
						||
    add_headerfiles("src/*.h")
 | 
						||
    
 | 
						||
	-- 头文件目录
 | 
						||
    add_includedirs("/usr/local/include")
 | 
						||
    -- 库目录
 | 
						||
    add_linkdirs("/usr/local/lib")
 | 
						||
 | 
						||
	-- 链接 非系统库
 | 
						||
    add_links("pthread")
 | 
						||
    -- 链接 系统库
 | 
						||
    add_syslinks("pthread")
 | 
						||
 | 
						||
	-- 项目依赖,会自动添加目录与库
 | 
						||
    add_deps("lua")
 | 
						||
    -- 就继承了 lua 的所有导出设置:linkdirs, links, includedirs以及defines
 | 
						||
    -- {inherit = false} 可禁止配置继承
 | 
						||
	
 | 
						||
	-- 添加第三方库依赖
 | 
						||
	add_requires("lua")
 | 
						||
	-- 链接第三方库
 | 
						||
	add_packages("lua")
 | 
						||
```
 | 
						||
 | 
						||
## 第三方库
 | 
						||
 | 
						||
```lua
 | 
						||
-- 远程第三方仓库集
 | 
						||
add_repositories("my-repo git@github.com:myrepo/xmake-repo.git")
 | 
						||
-- 本地第三方仓库集
 | 
						||
add_repositories("my-repo myrepo")
 | 
						||
 | 
						||
-- 定义第三方库
 | 
						||
package("libjpeg")
 | 
						||
    set_urls("http://www.ijg.org/files/jpegsrc.$(version).tar.gz")
 | 
						||
    add_versions("v9c", "650250979303a649e21f87b5ccd02672af1ea6954b911342ea491f351ceb7122")
 | 
						||
    on_install("windows", function (package)
 | 
						||
        os.mv("jconfig.vc", "jconfig.h")
 | 
						||
        os.vrun("nmake -f makefile.vc")
 | 
						||
        os.cp("*.h", package:installdir("include"))
 | 
						||
        os.cp("libjpeg.lib", package:installdir("lib"))
 | 
						||
    end)
 | 
						||
    on_install("macosx", "linux", function (package)
 | 
						||
        import("package.tools.autoconf").install(package)
 | 
						||
    end)
 | 
						||
package_end()
 | 
						||
 | 
						||
--语义版本支持,例如:”>= 1.1.0 < 1.2”, “~1.6”, “1.2.x”, “1.*”
 | 
						||
add_requires("lua 5.4.*", "libpng ~1.16", "brew::zlib", {alias = "zlib"})
 | 
						||
add_requires("vcpkg::zlib", "vcpkg::pcre2")
 | 
						||
```
 | 
						||
 | 
						||
 | 
						||
 | 
						||
## 编译配置
 | 
						||
 | 
						||
```lua
 | 
						||
-- 启用调试符号
 | 
						||
set_symbols("debug")
 | 
						||
-- 隐藏符号
 | 
						||
set_symbols("hidden")
 | 
						||
-- 添加扩展指令集
 | 
						||
add_vectorexts("sse2", "sse3", "ssse3", "mmx")
 | 
						||
 | 
						||
-- 仅添加C代码相关编译flags
 | 
						||
add_cflags("-g", "-O2", "-DDEBUG")
 | 
						||
-- 添加C/C++代码相关编译flags
 | 
						||
add_cxflags("-g", "-O2", "-DDEBUG")
 | 
						||
-- 仅添加C++代码相关编译flags
 | 
						||
add_cxxflags("-g", "-O2", "-DDEBUG", {force = true})
 | 
						||
 | 
						||
-- force 强制检测 flag 是否添加成功
 | 
						||
 | 
						||
-- 设置语言标准
 | 
						||
set_languages("c99", "c++11")
 | 
						||
 | 
						||
-- 编译优化选项
 | 
						||
set_optimize("fastest")
 | 
						||
 | 
						||
set_toolchain("cxx", "clang")
 | 
						||
set_toolchain("ld", "clang++")
 | 
						||
 | 
						||
-- 设置 xmake f 参数默认值,优先级最高
 | 
						||
set_config("cflags", "-DTEST")
 | 
						||
set_config("sdk", "/home/xxx/tooksdk")
 | 
						||
set_config("cc", "gcc")
 | 
						||
set_config("ld", "g++")
 | 
						||
```
 | 
						||
 | 
						||
 | 
						||
 | 
						||
## Lua对象接口
 | 
						||
 | 
						||
| Target 接口                      |                    |
 | 
						||
| -------------------------------- | ------------------ |
 | 
						||
| target:name()                    | 获取目标名         |
 | 
						||
| target:targetfile()              | 获取目标文件路径   |
 | 
						||
| target:targetkind()              | 获取目标构建类型   |
 | 
						||
| target:get("defines")            | 获取目标宏定义     |
 | 
						||
| target:get("xxx")                | 获取set_/add_ 信息 |
 | 
						||
| target:add("link","pthread")     | 添加目标设置       |
 | 
						||
| target:set("link","pthread","z") | 覆写目标设置       |
 | 
						||
| target:deps()                    | 获取目标所有依赖   |
 | 
						||
| target:dep("depname")            | 获取指定依赖       |
 | 
						||
| target:opts(")                   | 获取所有关联选项   |
 | 
						||
| target:opt("optname")            | 获取指定关联选项   |
 | 
						||
| target:pkgs()                    | 获取所有关联依赖包 |
 | 
						||
| target:pkg("pkgname")            | 获取指定关联依赖包 |
 | 
						||
| target:sourcebatches()           | 获取所有源文件列表 |
 | 
						||
 | 
						||
 | 
						||
 | 
						||
# Rule
 | 
						||
 | 
						||
- 属性与事件组成特定实体
 | 
						||
- 方便继承到其他域中
 | 
						||
- 项目间存在组合关系
 | 
						||
 | 
						||
 | 
						||
# Package
 | 
						||
 | 
						||
第三方库配置
 | 
						||
 | 
						||
- 语义版本支持,例如:”>= 1.1.0 < 1.2”, “~1.6”, “1.2.x”, “1.*”
 | 
						||
 | 
						||
第三方库的配置和项目配置不一样
 | 
						||
 | 
						||
kind 决定 package 如何用于 项目
 | 
						||
 | 
						||
- 程序依赖
 | 
						||
- 库依赖
 | 
						||
- 源码依赖
 | 
						||
 | 
						||
## 接口
 | 
						||
 | 
						||
- #### 类型
 | 
						||
 | 
						||
  - #### set_kind
 | 
						||
 | 
						||
- #### 版本
 | 
						||
 | 
						||
  - #### set_urls
 | 
						||
 | 
						||
  - #### add_urls
 | 
						||
 | 
						||
  - #### add_versions
 | 
						||
 | 
						||
  - #### add_patches
 | 
						||
 | 
						||
- #### 参数
 | 
						||
 | 
						||
  - #### add_configs
 | 
						||
 | 
						||
```lua
 | 
						||
-- 源码地址
 | 
						||
set_urls("https://ffmpeg.org/releases/ffmpeg-$(version).tar.bz2", {alias = "home"})
 | 
						||
add_urls("https://github.com/FFmpeg/FFmpeg/archive/n$(version).zip", {alias = "github"})
 | 
						||
add_urls("https://gitlab.gnome.org/GNOME/libxml2.git")
 | 
						||
 | 
						||
-- 源码包 与 哈希码
 | 
						||
add_versions("home:4.0.2", "346c51735f42c37e0712e0b3d2f6476c86ac15863e4445d9e823fe396420d056")
 | 
						||
add_versions("github:4.0.2", "4df1ef0bf73b7148caea1270539ef7bd06607e0ea8aa2fbf1bb34062a097f026")
 | 
						||
 | 
						||
-- 版本补丁
 | 
						||
add_patches("1.15", "https://raw.githubusercontent.com/Homebrew/patches/9be2793af/libiconv/patch-utf8mac.diff",
 | 
						||
    "e8128732f22f63b5c656659786d2cf76f1450008f36bcf541285268c66cabeab")
 | 
						||
 | 
						||
-- 配置自定义参数 与 参数描述
 | 
						||
add_configs("bitwidth", {description = "Set the code unit width.", default = "8", values = {"8", "16", "32"}})
 | 
						||
 | 
						||
package("luasocket")
 | 
						||
	-- 设置类型 binary 不可省略
 | 
						||
    set_kind("library")
 | 
						||
    set_homepage("https://cmake.org")
 | 
						||
    set_description("A cross-platform family of tool designed to build, test and package software")
 | 
						||
```
 | 
						||
 | 
						||
 | 
						||
 | 
						||
# Option
 | 
						||
 | 
						||
xmake 命令后加入可选配置
 | 
						||
 | 
						||
 | 
						||
 | 
						||
# Task
 | 
						||
 | 
						||
```shell
 | 
						||
#task project
 | 
						||
#option : k m
 | 
						||
#kind vsxmake2022 
 | 
						||
#mode "debug;release"
 | 
						||
xmake project -k vsxmake2022 -m "debug;release"
 | 
						||
xmake project --help
 | 
						||
```
 | 
						||
 | 
						||
 | 
						||
 | 
						||
xmake可以实现自定义任务或者插件,其两者的核心就是`task`任务,其两者实际上是一样的,xmake的插件都是用`task`实现的。
 | 
						||
 | 
						||
本质上都是任务,只是[set_category](https://www.bookstack.cn/read/xmake/manual-plugin_task.md#taskset_category)分类不同而已。
 | 
						||
 | 
						||
| 接口                                                         | 描述               | 支持版本 |
 | 
						||
| ------------------------------------------------------------ | ------------------ | -------- |
 | 
						||
| [task](https://www.bookstack.cn/read/xmake/manual-plugin_task.md#task) | 定义插件或者任务   | >= 2.0.1 |
 | 
						||
| [task_end](https://www.bookstack.cn/read/xmake/manual-plugin_task.md#task_end) | 结束定义插件或任务 | >= 2.1.1 |
 | 
						||
| [set_menu](https://www.bookstack.cn/read/xmake/manual-plugin_task.md#taskset_menu) | 设置任务菜单       | >= 2.0.1 |
 | 
						||
| [set_category](https://www.bookstack.cn/read/xmake/manual-plugin_task.md#taskset_category) | 设置任务类别       | >= 2.0.1 |
 | 
						||
| [on_run](https://www.bookstack.cn/read/xmake/manual-plugin_task.md#taskon_run) | 设置任务运行脚本   | >= 2.0.1 |
 |