你可以使用命令行缩写来简化输入,也可以使用全名,例如: xmake f 或者 xmake config. xmake f -p linux 或者 xmake config --plat=linux.

xmake将会自动探测当前主机平台,默认自动生成对应的目标程序。

Linux

  1. $ xmake f -p linux [-a i386|x86_64]
  2. $ xmake
  1. $ xmake f -p android --ndk=~/files/android-ndk-r10e/ [-a armv5te|armv6|armv7-a|armv8-a|arm64-v8a]
  2. $ xmake

如果要手动指定ndk中具体某个工具链,而不是使用默认检测的配置,可以通过—bin来设置,例如:

  1. $ xmake f -p android --ndk=~/files/android-ndk-r10e/ -a arm64-v8a --bin=~/files/android-ndk-r10e/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin

主要用于设置选择编译工具的具体bin目录,这个的使用跟交叉编译中的的行为是一致的。

如果手动设置了bin目录,没有通过检测,可以看下是否--arch=参数没有匹配对。

iPhoneOS

  1. $ xmake
  1. $ xmake f -p windows [-a x86|x64]
  2. $ xmake

Mingw

  1. $ xmake f -p mingw --sdk=/usr/local/i386-mingw32-4.3.0/ [-a i386|x86_64]
  2. $ xmake
  1. $ xmake f -p watchos [-a i386|armv7k]
  2. $ xmake

交叉编译

linux平台的交叉编译:

  1. $ xmake f -p linux --sdk=/usr/local/arm-linux-gcc/ [--bin=/sdk/bin] [--cross=arm-linux-]
  2. $ xmake

其他平台的交叉编译:

如果不关心实际的平台名,只想交叉编译,可以直接用上面的命令,如果需要通过is_plat("myplat")判断自己的平台逻辑,则:

  1. $ xmake f -p myplat --sdk=/usr/local/arm-xxx-gcc/ [--bin=/sdk/bin] [--cross=arm-linux-]
  2. $ xmake

其中:

如果你想要了解更多参数选项,请运行: xmake f --help

—sdk

  • 设置交叉工具链的sdk根目录

大部分情况下,都不需要配置很复杂的toolchains前缀,例如:arm-linux- 什么的

只要这个工具链的sdk目录满足如下结构(大部分的交叉工具链都是这个结构):

  1. /home/toolchains_sdkdir
  2. - bin
  3. - arm-linux-gcc
  4. - arm-linux-ld
  5. - ...
  6. - lib
  7. - libxxx.a
  8. - include
  9. - xxx.h

那么,使用xmake进行交叉编译的时候,只需要进行如下配置和编译:

  1. $ xmake f -p linux --sdk=/home/toolchains_sdkdir
  2. $ xmake

这个时候,xmake会去自动探测,gcc等编译器的前缀名:arm-linux-,并且编译的时候,也会自动加上链接库头文件的搜索选项,例如:

  1. -I/home/toolchains_sdkdir/include -L/home/toolchains_sdkdir/lib

—bin

对于不规则工具链目录结构,靠单纯地选项设置,没法完全检测通过的情况下,可以通过这个选项继续附加设置工具链的bin目录位置。

例如:一些特殊的交叉工具链的,编译器bin目录,并不在 /home/toolchains_sdkdir/bin 这个位置,而是独立到了 /usr/opt/bin

  1. $ xmake f -p linux --sdk=/home/toolchains_sdkdir --bin=/usr/opt/bin
  2. $ xmake

v2.2.1版本之前,这个参数名是--toolchains,比较有歧义,因此新版本中,统一改成--bin=来设置bin目录。

—cross

  • 设置交叉工具链工具前缀

aarch64-linux-android-这种,通常如果你配置了或者—bin的情况下,xmake会去自动检测的,不需要自己手动设置。

但是对于一些极特殊的工具链,一个目录下同时有多个cross前缀的工具bin混在一起的情况,你需要手动设置这个配置,来区分到底需要选用哪个bin。

例如,toolchains的bin目录下同时存在两个不同的编译器:

  1. - armv7-linux-gcc
  2. - aarch64-linux-gcc

我们现在想要选用armv7的版本,则配置如下:

  1. $ xmake f -p linux --sdk=/usr/toolsdk --bin=/opt/bin --cross=armv7-linux-

—as

  • 设置asm汇编器

如果还要继续细分选择编译器,则继续追加相关编译器选项,例如:

  1. $ xmake f -p linux --sdk=/user/toolsdk --as=armv7-linux-as

如果存在AS环境变量的话,会优先使用当前环境变量中指定的值。

如果指定的编译器名不是那些xmake内置可识别的名字(带有gcc, clang等字样),那么编译器工具检测就会失败。这个时候我们可以通过:xmake f --as=gcc@/home/xxx/asmips.exe 设置ccmips.exe编译器作为类gcc的使用方式来编译。也就是说,在指定编译器为asmips.exe的同时,告诉xmake,它跟gcc用法和参数选项基本相同。

—cc

  • 设置c编译器

如果还要继续细分选择编译器,则继续追加相关编译器选项,例如:

如果存在CC环境变量的话,会优先使用当前环境变量中指定的值。

如果指定的编译器名不是那些xmake内置可识别的名字(带有gcc, clang等字样),那么编译器工具检测就会失败。这个时候我们可以通过:xmake f --cc=gcc@/home/xxx/ccmips.exe 设置ccmips.exe编译器作为类gcc的使用方式来编译。也就是说,在指定编译器为ccmips.exe的同时,告诉xmake,它跟gcc用法和参数选项基本相同。

—cxx

  • 设置c++编译器

如果还要继续细分选择编译器,则继续追加相关编译器选项,例如:

  1. $ xmake f -p linux --sdk=/user/toolsdk --cxx=armv7-linux-clang++

如果指定的编译器名不是那些xmake内置可识别的名字(带有gcc, clang等字样),那么编译器工具检测就会失败。这个时候我们可以通过:xmake f --cxx=clang++@/home/xxx/c++mips.exe 设置c++mips.exe编译器作为类clang++的使用方式来编译。也就是说,在指定编译器为c++mips.exe的同时,告诉xmake,它跟clang++用法和参数选项基本相同。

—ld

  • 设置c/c++/objc/asm链接器

如果还要继续细分选择链接器,则继续追加相关编译器选项,例如:

  1. $ xmake f -p linux --sdk=/user/toolsdk --ld=armv7-linux-clang++

如果存在LD环境变量的话,会优先使用当前环境变量中指定的值。

如果指定的编译器名不是那些xmake内置可识别的名字(带有gcc, clang等字样),那么链接器工具检测就会失败。这个时候我们可以通过:xmake f --ld=g++@/home/xxx/c++mips.exe 设置c++mips.exe链接器作为类g++的使用方式来编译。也就是说,在指定链接器为c++mips.exe的同时,告诉xmake,它跟g++用法和参数选项基本相同。

—sh

  • 设置c/c++/objc/asm共享库链接器
  1. $ xmake f -p linux --sdk=/user/toolsdk --sh=armv7-linux-clang++

如果存在SH环境变量的话,会优先使用当前环境变量中指定的值。

如果指定的编译器名不是那些xmake内置可识别的名字(带有gcc, clang等字样),那么链接器工具检测就会失败。这个时候我们可以通过:xmake f --sh=g++@/home/xxx/c++mips.exe 设置c++mips.exe链接器作为类g++的使用方式来编译。也就是说,在指定链接器为c++mips.exe的同时,告诉xmake,它跟g++用法和参数选项基本相同。

—ar

  • 设置c/c++/objc/asm静态库归档器
  1. $ xmake f -p linux --sdk=/user/toolsdk --ar=armv7-linux-ar

如果存在AR环境变量的话,会优先使用当前环境变量中指定的值。

如果指定的编译器名不是那些xmake内置可识别的名字(带有ar等字样),那么链接器工具检测就会失败。这个时候我们可以通过:xmake f --ar=ar@/home/xxx/armips.exe 设置armips.exe链接器作为类ar的使用方式来编译。也就是说,在指定链接器为armips.exe的同时,告诉xmake,它跟ar用法和参数选项基本相同。

我们也可以将一些常用配置保存到全局配置中,来简化频繁地输入:

例如:

  1. $ xmake g --ndk=~/files/android-ndk-r10e/

现在,我们重新配置和编译android程序:

  1. $ xmake f -p android
  2. $ xmake

以后,就不需要每次重复配置--ndk=参数了。

每个命令都有其简写,例如: xmake g 或者 xmake global.

有时候,配置出了问题编译不过,或者需要重新检测各种依赖库和接口,可以加上-c参数,清除缓存的配置,强制重新检测和配置

  1. $ xmake f -c
  2. $ xmake
  1. $ xmake f -p iphoneos -c