通过xmake f|config配置命令,设置构建前的相关配置信息,详细参数选项,请运行: xmake f --help

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

目标平台

主机平台

  1. $ xmake

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

Linux

  1. $ xmake f -p linux [-a i386|x86_64]
  2. $ xmake

Android

  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目录,这个的使用跟交叉编译中的—bin的行为是一致的。

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

iPhoneOS

  1. $ xmake f -p iphoneos [-a armv7|armv7s|arm64|i386|x86_64]
  2. $ xmake

Windows

  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

Apple WatchOS

  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

其他平台的交叉编译:

  1. $ xmake f -p cross --sdk=/usr/local/arm-xxx-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

其中:

参数名 描述
—sdk 设置交叉工具链的sdk根目录
—bin 设置工具链bin目录
—cross 设置交叉工具链工具前缀
—as 设置asm汇编器
—cc 设置c编译器
—cxx 设置c++编译器
—mm 设置objc编译器
—mxx 设置objc++编译器
—sc 设置swift编译器
—gc 设置golang编译器
—dc 设置dlang编译器
—rc 设置rust编译器
—cu 设置cuda编译器
—ld 设置c/c++/objc/asm链接器
—sh 设置c/c++/objc/asm共享库链接器
—ar 设置c/c++/objc/asm静态库归档器
—sc-ld 设置swift链接器
—sc-sh 设置swift共享库链接器
—gc-ld 设置golang链接器
—gc-ar 设置golang静态库归档器
—dc-ld 设置dlang链接器
—dc-sh 设置dlang共享库链接器
—dc-ar 设置dlang静态库归档器
—rc-ld 设置rust链接器
—rc-sh 设置rust共享库链接器
—rc-ar 设置rust静态库归档器
—cu-cxx 设置cuda host编译器
—cu-ld 设置cuda链接器
—asflags 设置asm汇编编译选项
—cflags 设置c编译选项
—cxflags 设置c/c++编译选项
—cxxflags 设置c++编译选项
—mflags 设置objc编译选项
—mxflags 设置objc/c++编译选项
—mxxflags 设置objc++编译选项
—scflags 设置swift编译选项
—gcflags 设置golang编译选项
—dcflags 设置dlang编译选项
—rcflags 设置rust编译选项
—cuflags 设置cuda编译选项
—ldflags 设置链接选项
—shflags 设置共享库链接选项
—arflags 设置静态库归档选项

如果你想要了解更多参数选项,请运行: 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

这些都是xmake自动处理的,不需要手动配置他们。。

—bin

  • 设置工具链bin目录

对于不规则工具链目录结构,靠单纯地—sdk选项设置,没法完全检测通过的情况下,可以通过这个选项继续附加设置工具链的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-这种,通常如果你配置了—sdk或者—bin的情况下,xmake会去自动检测的,不需要自己手动设置。

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

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

  1. /opt/bin
  2. - armv7-linux-gcc
  3. - 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编译器

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

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

如果存在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++

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

如果指定的编译器名不是那些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
  2. $ xmake