summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-03-14 09:56:29 +0800
committerruki <[email protected]>2017-03-14 09:56:29 +0800
commit90c32618b1c6e0a5df19ee63d23bcab83ae1410a (patch)
treebb9fb9dde3c5a239b38c2932956c17aaf233b0e7
parent0a931dee6044337a08fc641872ef8c69564808bc (diff)
improve cross-compile docs
-rw-r--r--docs/manual.md2
-rwxr-xr-xdocs/zh/README.md197
2 files changed, 193 insertions, 6 deletions
diff --git a/docs/manual.md b/docs/manual.md
index f856930f3..a694f3dfc 100644
--- a/docs/manual.md
+++ b/docs/manual.md
@@ -262,7 +262,9 @@ For example:
##### set_xmakever
+<p class="tip">
Translating ..., help me please! [Edit this page](https://github.com/tboox/xmake/blob/master/docs/manual.md)
+</p>
###### 设置最小xmake版本
diff --git a/docs/zh/README.md b/docs/zh/README.md
index a9c1a1301..0fc819158 100755
--- a/docs/zh/README.md
+++ b/docs/zh/README.md
@@ -144,6 +144,16 @@ hello`main:
## 配置
+通过`xmake f|config`配置命令,设置构建前的相关配置信息。
+
+
+<p class="tip">
+ 你可以使用命令行缩写来简化输入,也可以使用全名,例如: <br>
+ `xmake f` 或者 `xmake config`.<br>
+ `xmake f -p linux` 或者 `xmake config --plat=linux`.<br>
+ `xmake f -p linux -a i386` 或者 `xmake config --plat=linux --arch=i386`
+</p>
+
#### 目标平台
##### 主机平台
@@ -170,6 +180,18 @@ $ xmake f -p android --ndk=~/files/android-ndk-r10e/ [-a armv5te|armv6|armv7-a|a
$ xmake
```
+如果要手动指定ndk中具体某个工具链,而不是使用默认检测的配置,可以通过[--toolchains](#-toolchains)来设置,例如:
+
+```bash
+$ xmake f -p android --ndk=~/files/android-ndk-r10e/ -a arm64-v8a --toolchains=~/files/android-ndk-r10e/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin
+```
+
+[--toolchains](#-toolchains)主要用于设置选择编译工具的具体bin目录,这个的使用跟[交叉编译](#交叉编译)中的[--toolchains](#-toolchains)的行为是一致的。
+
+<p class="tip">
+如果手动设置了`toolchains`的bin目录,没有通过检测,可以看下是否`--arch=`参数没有匹配对。
+</p>
+
##### iPhoneOS
```bash
@@ -205,15 +227,178 @@ $ xmake f -p linux --sdk=/usr/local/arm-linux-gcc/ [--toolchains=/sdk/bin] [--cr
$ xmake
```
+其中:
+
+| 参数名 | 描述 |
+| ---------------------------- | -------------------------------- |
+| [--sdk](#-sdk) | 设置交叉工具链的sdk根目录 |
+| [--toolchains](#-toolchains) | 设置工具链bin目录录 |
+| [--cross](#-cross) | 设置交叉工具链工具前缀 |
+| [--as](#-as) | 设置`asm`汇编器 |
+| [--cc](#-cc) | 设置`c`编译器 |
+| [--cxx](#-cxx) | 设置`c++`编译器 |
+| [--mm](#-mm) | 设置`objc`编译器 |
+| [--mxx](#-mxx) | 设置`objc++`编译器 |
+| [--sc](#-sc) | 设置`swift`编译器 |
+| [--gc](#-gc) | 设置`golang`编译器 |
+| [--dc](#-dc) | 设置`dlang`编译器 |
+| [--rc](#-rc) | 设置`rust`编译器 |
+| [--ld](#-ld) | 设置`c/c++/objc/asm`链接器 |
+| [--sh](#-sh) | 设置`c/c++/objc/asm`共享库链接器 |
+| [--ar](#-ar) | 设置`c/c++/objc/asm`静态库归档器 |
+| [--sc-ld](#-sc-ld) | 设置`swift`链接器 |
+| [--sc-sh](#-sc-sh) | 设置`swift`共享库链接器 |
+| [--gc-ld](#-gc-ld) | 设置`golang`链接器 |
+| [--gc-ar](#-gc-ar) | 设置`golang`静态库归档器 |
+| [--dc-ld](#-dc-ld) | 设置`dlang`链接器 |
+| [--dc-sh](#-dc-sh) | 设置`dlang`共享库链接器 |
+| [--dc-ar](#-dc-ar) | 设置`dlang`静态库归档器 |
+| [--rc-ld](#-rc-ld) | 设置`rust`链接器 |
+| [--rc-sh](#-rc-sh) | 设置`rust`共享库链接器 |
+| [--rc-ar](#-rc-ar) | 设置`rust`静态库归档器 |
+
<p class="tip">
- 你可以使用命令行缩写来简化输入,也可以使用全名,例如: <br>
- `xmake f` 或者 `xmake config`.<br>
- `xmake f -p linux` 或者 `xmake config --plat=linux`.<br>
- `xmake f -p linux -a i386` 或者 `xmake config --plat=linux --arch=i386`.<br>
- <br>
- 如果你想要了解更多参数选项,请运行: `xmake f --help`
+如果你想要了解更多参数选项,请运行: `xmake f --help`。
</p>
+###### --sdk
+
+- 设置交叉工具链的sdk根目录
+
+大部分情况下,都不需要配置很复杂的toolchains前缀,例如:`arm-linux-` 什么的
+
+只要这个工具链的sdk目录满足如下结构(大部分的交叉工具链都是这个结构):
+
+```
+/home/toolchains_sdkdir
+ - bin
+ - arm-linux-gcc
+ - arm-linux-ld
+ - ...
+ - lib
+ - libxxx.a
+ - include
+ - xxx.h
+```
+
+那么,使用xmake进行交叉编译的时候,只需要进行如下配置和编译:
+
+```bash
+$ xmake f -p linux --sdk=/home/toolchains_sdkdir
+$ xmake
+```
+
+这个时候,xmake会去自动探测,gcc等编译器的前缀名:`arm-linux-`,并且编译的时候,也会自动加上`链接库`和`头文件`的搜索选项,例如:
+
+```
+-I/home/toolchains_sdkdir/include -L/home/toolchains_sdkdir/lib
+```
+
+这些都是xmake自动处理的,不需要手动配置他们。。
+
+###### --toolchains
+
+- 设置工具链bin目录
+
+对于不规则工具链目录结构,靠单纯地[--sdk](#-sdk)选项设置,没法完全检测通过的情况下,可以通过这个选项继续附加设置工具链的bin目录位置。
+
+例如:一些特殊的交叉工具链的,编译器bin目录,并不在 `/home/toolchains_sdkdir/bin` 这个位置,而是独立到了 `/usr/opt/bin`
+
+```bash
+$ xmake f -p linux --sdk=/home/toolchains_sdkdir --toolchains=/usr/opt/bin
+$ xmake
+```
+
+###### --cross
+
+- 设置交叉工具链工具前缀
+
+像`aarch64-linux-android-`这种,通常如果你配置了[--sdk](-sdk)或者[--toolchains](-toolchains)的情况下,xmake会去自动检测的,不需要自己手动设置。
+
+但是对于一些极特殊的工具链,一个目录下同时有多个cross前缀的工具bin混在一起的情况,你需要手动设置这个配置,来区分到底需要选用哪个bin。
+
+例如,toolchains的bin目录下同时存在两个不同的编译器:
+
+```
+/opt/bin
+ - armv7-linux-gcc
+ - aarch64-linux-gcc
+```
+
+我们现在想要选用armv7的版本,则配置如下:
+
+```bash
+$ xmake f -p linux --sdk=/usr/toolsdk --toolchains=/opt/bin --cross=armv7-linux-
+```
+
+###### --as
+
+- 设置`asm`汇编器
+
+如果还要继续细分选择编译器,则继续追加相关编译器选项,例如:
+
+```bash
+$ xmake f -p linux --sdk=/user/toolsdk --as=armv7-linux-as
+```
+
+如果存在`AS`环境变量的话,会优先使用当前环境变量中指定的值。
+
+###### --cc
+
+- 设置c编译器
+
+如果还要继续细分选择编译器,则继续追加相关编译器选项,例如:
+
+```bash
+$ xmake f -p linux --sdk=/user/toolsdk --cc=armv7-linux-clang
+```
+
+如果存在`CC`环境变量的话,会优先使用当前环境变量中指定的值。
+
+###### --cxx
+
+- 设置`c++`编译器
+
+如果还要继续细分选择编译器,则继续追加相关编译器选项,例如:
+
+```bash
+$ xmake f -p linux --sdk=/user/toolsdk --cxx=armv7-linux-clang++
+```
+
+如果存在`CXX`环境变量的话,会优先使用当前环境变量中指定的值。
+
+###### --ld
+
+- 设置`c/c++/objc/asm`链接器
+
+如果还要继续细分选择链接器,则继续追加相关编译器选项,例如:
+
+```bash
+$ xmake f -p linux --sdk=/user/toolsdk --ld=armv7-linux-clang++
+```
+
+如果存在`LD`环境变量的话,会优先使用当前环境变量中指定的值。
+
+###### --sh
+
+- 设置`c/c++/objc/asm`共享库链接器
+
+```bash
+$ xmake f -p linux --sdk=/user/toolsdk --sh=armv7-linux-clang++
+```
+
+如果存在`SH`环境变量的话,会优先使用当前环境变量中指定的值。
+
+###### --ar
+
+- 设置`c/c++/objc/asm`静态库归档器
+
+```bash
+$ xmake f -p linux --sdk=/user/toolsdk --ar=armv7-linux-ar
+```
+
+如果存在`AR`环境变量的话,会优先使用当前环境变量中指定的值。
+
#### 全局配置
我们也可以将一些常用配置保存到全局配置中,来简化频繁地输入: