使用xmake编译工程
原文链接 https://waruqi.github.io/2016/02/04/project-compile.cn/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
如果你只想编译当前主机环境的平台,例如在windows上编译windows版本,在macosx上编译macosx版本,那么你只需要敲以下命令即可:
xmake
因为xmake默认会去检测当前的环境,默认编译当前主机的平台版本,不需要做额外的配置,并且默认编译的是release版本。
如果工程里面有多个目标,那么上面的命令,会去编译所有目标,如果只想编译指定一个目标,例如:test,那么只需执行:
xmake test
如果你想编译debug版本,那么需要做些简单的配置:
xmake config --mode=debug
xmake
xmake针对每个命令和参数,都提供了简写版本:
xmake f -m debug
xmake
注:为了提高灵活性,release版本和debug版本的编译选项设置,需要自己在工程描述文件中描述,如果没有设置的话,release和debug版本生成的程序是一样的。
如果你想强制重新构建所有,可以执行:
xmake -r
xmake --rebuild
如果要指定编译具体某个架构,可以这么进行编译:
xmake f -a armv7
xmake
一般情况下,如果没有指定架构,默认会去使用指定平台的默认架构,例如:macosx下默认是x86_64,iphoneos下士armv7
如果想要指定编译其他平台,例如在macosx上编译iphoneos的版本,那么:
xmake f -p iphoneos
xmake
编译android版本:
xmake f -p android --ndk=xxxx
xmake
虽然配置完后,每次编译不需要重新配置,但是如果切换编译目标平台到ios、linux,那么之前ndk的设置就被清除了,下次得重新配置。
如果想要更加方便的不同平台间来回切换编译,可以将ndk设置到全局配置中,例如:
-- 将ndk设置到全局配置中
xmake g --ndk=xxx
-- 切换到android编译平台,不需要每次都设置ndk了
xmake f -p android
xmake -r
-- 切换到ios编译平台
xmake f -p iphoneos
xmake -r
编译windows版本,很简单,只要你机子装了vs,xmake会去自动检测,不需要做额外的配置,只需要打开cmd,进入你的工程目录, 然后执行xmake就行了。
使用其他交叉工具链进行编译:
xmake f -p android -a armv7-a --cross=arm-linux-androideabi- --toolchains=/xxxx/bin
xmake
默认在编译配置的时候,会去缓存上一次的配置,这样每次配置只需要修改部分参数就行了,不需要每次全部重新配置
如果你想重新配置所有,清楚原有的缓存,可以加上--clean参数:
xmake f -c
xmake f --clean
xmake
xmake在配置的时候,会去检测工程依赖的一些接口和链接库,如果你想要看具体详细的配置检测信息,可以加上--verbose参数,回显配置信息
xmake f -c -v
xmake f --clean --verbose
xmake
xmake还支持在编译的时候,手动设置一些编译选项和工具,你可以执行xmake f --help
看下:
Usage: xmake config|f [options] [target]
Configure the project.
Options:
-c, --clean Clean the cached configure and configure all again.
-p PLAT, --plat=PLAT Compile for the given platform. (default: macosx)
- android
- iphoneos
- iphonesimulator
- linux
- macosx
- mingw
- watchos
- watchsimulator
- windows
-a ARCH, --arch=ARCH Compile for the given architecture. (default: auto)
- android: armv5te armv6 armv7-a armv8-a arm64-v8a
- iphoneos: armv7 armv7s arm64
- iphonesimulator: i386 x86_64
- linux: i386 x86_64
- macosx: i386 x86_64
- mingw: i386 x86_64
- watchos: armv7 armv7s arm64
- watchsimulator: i386 x86_64
- windows: x86 x64 amd64 x86_amd64
-m MODE, --mode=MODE Compile for the given mode. (default: release)
- debug
- release
- profile
-k KIND, --kind=KIND Compile for the given target kind. (default: static)
- static
- shared
- binary
--host=HOST The current host environment. (default: macosx)
--make=MAKE Set the make path. (default: auto)
--ccache=CCACHE Enable or disable the c/c++ compiler cache. (default: auto)
--cross=CROSS The cross toolchains prefix
.e.g
- i386-mingw32-
- arm-linux-androideabi-
--toolchains=TOOLCHAINS The cross toolchains directory
--cc=CC The C Compiler
--cxx=CXX The C++ Compiler
--cflags=CFLAGS The C Compiler Flags
--cxflags=CXFLAGS The C/C++ compiler Flags
--cxxflags=CXXFLAGS The C++ Compiler Flags
--as=AS The Assembler
--asflags=ASFLAGS The Assembler Flags
--sc=SC The Swift Compiler
--scflags=SCFLAGS The Swift Compiler Flags
--ld=LD The Linker
--ldflags=LDFLAGS The Binary Linker Flags
--ar=AR The Static Library Linker
--arflags=ARFLAGS The Static Library Linker Flags
--sh=SH The Shared Library Linker
--shflags=SHFLAGS The Shared Library Linker Flags
--ndk=NDK The NDK Directory
--ndk_sdkver=NDK_SDKVER The SDK Version for NDK (default: auto)
--mm=MM The Objc Compiler
--mxx=MXX The Objc++ Compiler
--mflags=MFLAGS The Objc Compiler Flags
--mxflags=MXFLAGS The Objc/c++ Compiler Flags
--mxxflags=MXXFLAGS The Objc++ Compiler Flags
--xcode_dir=XCODE_DIR The Xcode Application Directory (default: auto)
--xcode_sdkver=XCODE_SDKVER The SDK Version for Xcode (default: auto)
--target_minver=TARGET_MINVER The Target Minimal Version (default: auto)
--mobileprovision=MOBILEPROVISION The Provisioning Profile File (default: auto)
--codesign=CODESIGN The Code Signing Indentity (default: auto)
--entitlements=ENTITLEMENTS The Code Signing Entitlements (default: auto)
--vs=VS The Microsoft Visual Studio (default: auto)
-f FILE, --file=FILE Read a given xmake.lua file. (default: xmake.lua)
-P PROJECT, --project=PROJECT Change to the given project directory.
Search priority:
1. The Given Command Argument
2. The Envirnoment Variable: XMAKE_PROJECT_DIR
3. The Current Directory
-o BUILDIR, --buildir=BUILDIR Set the build directory. (default: build)
-v, --verbose Print lots of verbose information.
--version Print the version number and exit.
-h, --help Print this help message and exit.
target Configure for the given target. (default: all)