diff options
| author | ruki <waruqi@gmail.com> | 2018-08-22 22:39:46 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-08-22 09:58:38 +0800 |
| commit | 16edf3ab0c9f197246118f8c3146df48f5365fca (patch) | |
| tree | 4690cc8c771e85e6bc46b3a545495fa9de418221 /zh | |
| parent | 96e0ba81e20fa68d973ac84c01ead139118c072a (diff) | |
| download | xmake-docs-16edf3ab0c9f197246118f8c3146df48f5365fca.tar.gz xmake-docs-16edf3ab0c9f197246118f8c3146df48f5365fca.zip | |
update readme docs
Diffstat (limited to 'zh')
| -rw-r--r-- | zh/README.md | 148 | ||||
| -rw-r--r-- | zh/manual.md | 12 |
2 files changed, 153 insertions, 7 deletions
diff --git a/zh/README.md b/zh/README.md index 551ffda0..3b74a808 100644 --- a/zh/README.md +++ b/zh/README.md @@ -596,7 +596,7 @@ target("usbview") 更多详情可以参考:[#173](https://github.com/tboox/xmake/issues/173) -## 配置 +## 编译配置 通过`xmake f|config`配置命令,设置构建前的相关配置信息,详细参数选项,请运行: `xmake f --help`。 @@ -965,6 +965,152 @@ $ xmake f -p iphoneos -c $ xmake ``` +## 依赖包管理 + +#### 本地内置模式 + +通过在项目中内置依赖包目录以及二进制包文件,可以方便的集成一些第三方的依赖库,这种方式比较简单直接,但是缺点也很明显,不方便管理。 + +以tbox工程为例,其依赖包如下: + +``` +- base.pkg +- zlib.pkg +- polarssl.pkg +- openssl.pkg +- mysql.pkg +- pcre.pkg +- ... +``` + +如果要让当前工程识别加载这些包,首先要指定包目录路径,例如: + +```lua +add_packagedirs("packages") +``` + +指定好后,就可以在target作用域中,通过[add_packages](https://xmake.io/#/zh/manual?id=targetadd_packages)接口,来添加集成包依赖了,例如: + +```lua +target("tbox") + add_packages("zlib", "polarssl", "pcre", "mysql") +``` + +那么如何去生成一个*.pkg的包呢,如果是基于xmake的工程,生成方式很简单,只需要: + +```console +$ cd tbox +$ xmake package +``` + +即可在build目录下生成一个tbox.pkg的跨平台包,给第三方项目使用,我也可以直接设置输出目录,编译生成到对方项目中去,例如: + +```console +$ cd tbox +$ xmake package -o ../test/packages +``` + +这样,test工程就可以通过[add_packages](https://xmake.io/#/zh/manual?id=targetadd_packages)和[add_packagedirs](https://xmake.io/#/zh/manual?id=add_packagedirs)去配置和使用tbox.pkg包了。 + +关于内置包的详细描述,还可以参考下相关文章,这里面有详细介绍:[依赖包的添加和自动检测机制](http://tboox.org/cn/2016/08/06/add-package-and-autocheck/) + +#### 系统查找模式 + +如果觉得上述内置包的管理方式非常不方便,可以通过xmake提供的扩展接口[lib.detect.find_package](https://xmake.io/#/zh/manual?id=detect-find_package)去查找系统已有的依赖包。 + +目前此接口支持以下一些包管理支持: + +* vcpkg +* homebrew +* pkg-config + +并且通过系统和第三方包管理工具进行依赖包的安装,然后与xmake进行集成使用,例如我们查找一个openssl包: + +```lua +import("lib.detect.find_package") + +local package = find_package("openssl") +``` + +返回的结果如下: + +```lua +{links = {"ssl", "crypto", "z"}, linkdirs = {"/usr/local/lib"}, includedirs = {"/usr/local/include"}} +``` + +如果查找成功,则返回一个包含所有包信息的table,如果失败返回nil + +这里的返回结果可以直接作为`target:add`, `option:add`的参数传入,用于动态增加`target/option`的配置: + +```lua +option("zlib") + set_showmenu(true) + before_check(function (option) + import("lib.detect.find_package") + option:add(find_package("zlib")) + end) +``` + +```lua +target("test") + on_load(function (target) + import("lib.detect.find_package") + target:add(find_package("zlib")) + end) +``` + +如果系统上装有`homebrew`, `pkg-config`等第三方工具,那么此接口会尝试使用它们去改进查找结果。 + +更完整的使用描述,请参考:[lib.detect.find_package](https://xmake.io/#/zh/manual?id=detect-find_package)接口文档。 + +##### homebrew集成支持 + +由于homebrew一般都是把包直接装到的系统中去了,因此用户不需要做任何集成工作,`lib.detect.find_package`就已经原生无缝支持。 + +##### vcpkg集成支持 + +目前xmake v2.2.2版本已经支持了vcpkg,用户只需要装完vcpkg后,执行`$ vcpkg integrate install`,xmake就能自动从系统中检测到vcpkg的根路径,然后自动适配里面包。 + +当然,我们也可以手动指定vcpkg的根路径来支持: + +```console +$ xmake f --vcpkg=f:\vcpkg +``` + +或者我们可以设置到全局配置中去,避免每次切换配置的时候,重复设置: + +```console +$ xmake g --vcpkg=f:\vcpkg +``` + +#### 远程依赖模式 + +这个是xmake包管理的最终目标,目前还在开发内测中,不是很成熟,不过对于xmake的项目包,支持上基本没啥大问题了。 + +如果用户想要体验下的话,可以参考下下面的`xmake.lua`例子: + +```lua +add_requires("tboox.tbox ~1.6.0") +add_requires("zlib >=1.2.11") + +target("test") + set_kind("binary") + add_files("src/*.c") + add_packages("tboox.tbox", "zlib") +``` + +然后直接执行编译即可: + +```console +$ xmake +``` + +xmake会去远程拉取相关源码包,然后自动编译安装,最后编译项目,进行依赖包的链接。 + +我们可以看个演示视频,直观感受下:[远程依赖包使用视频](https://asciinema.org/a/140336) + +由于这个特性,还是开发中,暂不完全开放,因此文档就不详细描述了,有兴趣的同学可以关注下相关issues:[Remote package management](https://github.com/tboox/xmake/issues/69) 来持续跟进开发进展。 + ## 问答 #### 怎样获取更多参数选项信息? diff --git a/zh/manual.md b/zh/manual.md index 3236b4f3..c1cfe67e 100644 --- a/zh/manual.md +++ b/zh/manual.md @@ -524,10 +524,9 @@ add_plugindirs("$(projectdir)/plugins") ###### 添加包目录 -通过设置依赖包目录,可以方便的集成一些第三方的依赖库,以tbox工程为例,其包目录如下: +通过设置依赖包目录,可以方便的集成一些第三方的依赖库,以tbox工程为例,其依赖包如下: ``` -tbox.pkg - base.pkg - zlib.pkg - polarssl.pkg @@ -540,7 +539,7 @@ tbox.pkg 如果要让当前工程识别加载这些包,首先要指定包目录路径,例如: ```lua -add_packagedirs("pkg") +add_packagedirs("packages") ``` 指定好后,就可以在target作用域中,通过[add_packages](#add_packages)接口,来添加集成包依赖了,例如: @@ -7440,9 +7439,10 @@ target("test") 1. 如果指定`{packagedirs = ""}`参数,优先从这个参数指定的路径中查找本地包`*.pkg` 2. 如果在`xmake/modules`下面存在`detect.packages.find_xxx`脚本,那么尝试调用此脚本来改进查找结果 -3. 如果系统存在`pkg-config`,并且查找的是系统环境的库,则尝试使用`pkg-config`提供的路径和链接信息进行查找 -4. 如果系统存在`homebrew`,并且查找的是系统环境的库,则尝试使用`brew --prefix xxx`提供的信息进行查找 -5. 从参数中指定的pathes路径和一些已知的系统路径`/usr/lib`, `/usr/include`中进行查找 +3. 如果系统存在vcpkg,优先从vcpkg的包管理系统中去获取包 +4. 如果系统存在`pkg-config`,并且查找的是系统环境的库,则尝试使用`pkg-config`提供的路径和链接信息进行查找 +5. 如果系统存在`homebrew`,并且查找的是系统环境的库,则尝试使用`brew --prefix xxx`提供的信息进行查找 +6. 从参数中指定的pathes路径和一些已知的系统路径`/usr/lib`, `/usr/include`中进行查找 这里需要着重说下第二点,通过在`detect.packages.find_xxx`脚本来改进查找结果,很多时候自动的包探测是没法完全探测到包路径的, 尤其是针对windows平台,没有默认的库目录,也没有包管理app,很多库装的时候,都是自己所处放置在系统目录,或者添加注册表项。 |
