Xmake之常用API
前言
上一文我们介绍了Xmake的基本命令,使用Xmake的命令来构建项目基本等同于使用直接使用g++来构建,所以只有在项目比较简单时我们可以选择使用命令来构建,但是当项目比较复杂时,可以使用xmake.lua来配置项目的构建过程。
1.常用API简介
对于Xmake的入门使用者来说,只要学会几个简单的API就可以非常方便的配置我们的项目,其中,最常用到的几个API分别是
set_kind
: 设置target类型add_files
: 添加需要编译的源文件/静态库add_links
: 添加需要链接的动态库add_includedirs
: 添加头文件搜索路径add_linkdirs
: 添加动态库搜索路径add_ldflags
: 添加链接参数add_cxxflags
: 添加C++编译选项add_cflags
: 添加C编译选项add_cxflags
: 添加C/C++编译选项
2.API使用
在使用Xmake新创建的工程中,Xmake直接创建了一个xmake.lua,里面的内容是这样的:
add_rules("mode.debug", "mode.release")
target("hello")
set_kind("binary")
add_files("src/*.cpp")
其中,add_rules
是设置构建模式,这里设置了debug模式和release模式
set_kind
这里指定了编译出的target是二进制文件,即可执行程序
add_files
将src下面的所有cpp文件头添加进来了,add_files
支持通配符
下面介绍我们构建中的需求如何通过这些API来实现
1.添加编译源文件
如上面的例子所示,当我们需要将源文件添加编译范围中,只需要通过add_files
把文件添加进来即可,add_files
支持的文件类型如下:
Supported source file types | Description |
---|---|
.c/.cpp/.cc/.cxx | c++ file |
.s/.S/.asm | assembly files |
.m/.mm | objc file |
.swift | swift file |
.go | golang file |
.o/.obj | object File |
.a/.lib | static library files, will automatically merge the library to the target program |
.rc | msvc resource file |
.manifest | windows manifest file |
.dll | windows export file |
.ld/.lds | linker scripts file for gcc/clang |
.map/.ver | version script file for gcc/clang |
其中,通配符*表示匹配当前目录下的文件,**表示匹配多级目录下的文件。
2.添加头文件搜索路径
在添加头文件的搜索路径时,可以使用add_includedirs
,当然,也可以通过add_cxflags
或add_mxflags
等接口直接设置,这也是可以的。
3.添加动态库
如果需要链接动态库时,可以通过add_links
来将添加动态库,这里需要添加的动态库需要把开头lib以及后缀.so都去掉。
4.添加动态库搜索路径
通过add_linkdirs
来添加动态库的搜索路径,通过还要通过add_includedirs
来将头文件搜索路径添加进来。
5. 添加外部包
Xmake支持通过add_requires
来添加依赖包,我们可以通过添加版本号来限制包的版本,也可以不写版本号来使用最新版本,例如,通常情况下我们不需要其太复杂的用法
add_requires("tbox 1.6.*", "pcre 8.x", "libpng ^1.18")
add_requires("libpng ~1.16", "zlib 1.1.2 || >=1.2.11 <1.3.0")
add_requires("tbox", "libpng", "zlib")
6. Xmake配置的继承
此处所说的继承是指,如果一个文件夹中包含了好几个xmake管理的项目,那么父目录中的xmake配置将会继承到到子目录的xmake项目中,例如在父目录中通过add_includedirs
添加了头文件搜索路径,那么子目录中的项目不需要重复添加,更高级的用法包括定义全局变量,宏定义等等,大大方便了项目的管理。
hello
├── src
│ ├── main.cpp
│ └── subhello
│ ├── src
│ │ └── main.cpp
│ └── xmake.lua
└── xmake.lua
初级Xmake用户可以通过上面介绍的API完成一个普通项目的构建,如果项目更为复杂,那可能需要用到更为高级的用法,可以参阅Xmake的官方文档来研究更复杂的用法。