xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。
虽然,简单易用是 xmake 的一大特色,但 xmake 的功能也是非常强大的,既能够像 Make/Ninja 那样可以直接编译项目,也可以像 CMake/Meson 那样生成工程文件,还有内置的包管理系统来帮助用户解决 C/C++依赖库的集成使用问题。
目前,xmake主要用于C/C++项目的构建,但是同时也支持其他native语言的构建,可以实现跟C/C++进行混合编译,同时编译速度也是非常的快,可以跟Ninja持平。
如果你想要了解更多,请参考:在线文档, Github以及Gitee
xmake 官方也推出了一些入门课程,带你一步步快速上手 xmake,课程列表如下:
bash <(curl -fsSL https://xmake.io/shget.text)
bash <(wget https://xmake.io/shget.text -O -)
Invoke-Expression (Invoke-Webrequest 'https://xmake.io/psget.text' -UseBasicParsing).Content
官方的xmake包管理仓库: xmake-repo
$ xmake
$ xmake run console
$ xmake run -d console
$ xmake f -p [windows|linux|macosx|android|iphoneos ..] -a [x86|arm64 ..] -m [debug|release] $ xmake
$ xmake f --menu
测试工程: xmake-core
构建系统 | Termux (8core/-j12) | 构建系统 | MacOS (8core/-j12) |
---|---|---|---|
xmake | 24.890s | xmake | 12.264s |
ninja | 25.682s | ninja | 11.327s |
cmake(gen+make) | 5.416s+28.473s | cmake(gen+make) | 1.203s+14.030s |
cmake(gen+ninja) | 4.458s+24.842s | cmake(gen+ninja) | 0.988s+11.644s |
构建系统 | Termux (-j1) | 构建系统 | MacOS (-j1) |
---|---|---|---|
xmake | 1m57.707s | xmake | 39.937s |
ninja | 1m52.845s | ninja | 38.995s |
cmake(gen+make) | 5.416s+2m10.539s | cmake(gen+make) | 1.203s+41.737s |
cmake(gen+ninja) | 4.458s+1m54.868s | cmake(gen+ninja) | 0.988s+38.022s |
$ xmake show -l toolchains xcode Xcode IDE vs VisualStudio IDE yasm The Yasm Modular Assembler clang A C language family frontend for LLVM go Go Programming Language Compiler dlang D Programming Language Compiler gfortran GNU Fortran Programming Language Compiler zig Zig Programming Language Compiler sdcc Small Device C Compiler cuda CUDA Toolkit ndk Android NDK rust Rust Programming Language Compiler llvm A collection of modular and reusable compiler and toolchain technologies cross Common cross compilation toolchain nasm NASM Assembler gcc GNU Compiler Collection mingw Minimalist GNU for Windows gnu-rm GNU Arm Embedded Toolchain envs Environment variables toolchain fasm Flat Assembler tinyc Tiny C Compiler emcc A toolchain for compiling to asm.js and WebAssembly icc Intel C/C++ Compiler ifort Intel Fortran Compiler musl The musl-based cross-compilation toolchains
add_rules("mode.debug", "mode.release") target("console") set_kind("binary") add_files("src/*.c") if is_mode("debug") then add_defines("DEBUG") end
target("test") set_kind("binary") add_files("src/*.c") after_build(function (target) print("hello: %s", target:name()) os.exec("echo %s", target:targetfile()) end)
下载和使用在 xmake-repo 和第三方包仓库的依赖包:
add_requires("tbox >1.6.1", "libuv master", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8") add_requires("conan::openssl/1.1.1g", {alias = "openssl", optional = true, debug = true}) target("test") set_kind("binary") add_files("src/*.c") add_packages("tbox", "libuv", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8", "openssl")
另外,我们也可以使用 xrepo 命令来快速安装依赖包。
target("test") add_rules("qt.quickapp") add_files("src/*.cpp") add_files("src/qml.qrc")
target("test") set_kind("binary") add_files("src/*.cu") add_cugencodes("native") add_cugencodes("compute_35")
target("echo") add_rules("wdk.driver", "wdk.env.umdf") add_files("driver/*.c") add_files("driver/*.inx") add_includedirs("exe") target("app") add_rules("wdk.binary", "wdk.env.umdf") add_files("exe/*.cpp")
更多WDK驱动程序例子(umdf/kmdf/wdm),见:WDK工程例子
target("test") add_rules("xcode.application") add_files("src/*.m", "src/**.storyboard", "src/*.xcassets") add_files("src/Info.plist")
target("test") add_rules("xcode.framework") -- 或者 xcode.bundle add_files("src/*.m") add_files("src/Info.plist")
add_requires("libomp", {optional = true}) target("loop") set_kind("binary") add_files("src/*.cpp") add_rules("c++.openmp") add_packages("libomp")
$ xmake project -k vsxmake -m "debug;release" # 新版vs工程生成插件(推荐) $ xmake project -k vs -m "debug;release" $ xmake project -k cmake $ xmake project -k ninja $ xmake project -k compile_commands
$ xmake l ./test.lua $ xmake l -c "print('hello xmake!')" $ xmake l lib.detect.find_tool gcc $ xmake l > print("hello xmake!") > {1, 2, 3} < { 1, 2, 3 }
更多内置插件见相关文档:内置插件文档
其他扩展插件,请到插件仓库进行下载安装: xmake-plugins.
我们也可以在Gradle中使用xmake-gradle插件来集成编译JNI库
plugins {
id 'org.tboox.gradle-xmake-plugin' version '1.0.6'
}
android {
externalNativeBuild {
xmake {
path "jni/xmake.lua"
}
}
}
当gradle-xmake-plugin
插件被应用生效后,xmakeBuild
任务会自动注入到现有的assemble
任务中去,自动执行jni库编译和集成。
$ ./gradlew app:assembleDebug > Task :nativelib:xmakeConfigureForArm64 > Task :nativelib:xmakeBuildForArm64 >> xmake build [ 50%]: ccache compiling.debug nativelib.cc [ 75%]: linking.debug libnativelib.so [100%]: build ok! >> install artifacts to /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/arm64-v8a > Task :nativelib:xmakeConfigureForArmv7 > Task :nativelib:xmakeBuildForArmv7 >> xmake build [ 50%]: ccache compiling.debug nativelib.cc [ 75%]: linking.debug libnativelib.so [100%]: build ok! >> install artifacts to /Users/ruki/projects/personal/xmake-gradle/nativelib/libs/armeabi-v7a > Task :nativelib:preBuild > Task :nativelib:assemble > Task :app:assembleDebug
由于 xmake 是基于 lua 脚本的,所以不管是在描述域还是脚本域中的配置,我们都可以通过基础的 lua 条件判断语法去控制配置逻辑。 整个条件控制的语法逻辑大概如下。 if expr then -- ... elseif not expr then -- ... else -- ... end 整个语法结构非常的简单,并且同时适用于描述域配置和脚本域配置,其中 ex
xmake集成了内置的远程包依赖管理,用户只需要简单地在项目中添加自己所需要的包和版本,即可自动下载和集成对应的包到项目中,并且实现编译和链接。 例如: add_requires("libuv master", "ffmpeg", "zlib 1.20.*") add_requires("tbox >1.6.1", {optional=true, debug=true}) ad
前言 在开发xmake之前,我一直在使用gnumake/makefile来维护个人C/C++项目,一开始还好,然而等项目越来越庞大后,维护起来就非常吃力了,后续也用过一阵子automake系列工具,并不是很好用。 由于C/C++程序的构建过程比较繁琐,如果不借助IDE工具,很难快速构建一个新的C/C++程序,想要跨平台构建就更加麻烦了。 虽然IDE很好用,也很强大,但是还是有很多不足的地方,例如:
v2.3.1 1,无缝交叉编译. 2,用xmake project -k ninja生成ninja构建配置. 添加socket,pipe模块,改进process模块.重构进程调度器,并行调度构建.重构协程模块,准备远程和分布式编译. 生成后,用$ ninja构建. 无xmake.lua,可调用其他构建工具来完成编译. 只管xmake就行,对接xmake config的配置环境,复用xmake的平台
在Windows以及MacOS开发中,我们都可以使用图形化界面来构件工程,极大的方便了我们的开发流程,但是在linux开发中,总是需要借助Cmake/Makefile等工具,来编写编译的命令和代码,这使得维护起来非常不方便,特别是当项目的依赖变多,以及项目之间互相依赖时,简直让人头大,然而,有一款Xmake的构建工具最近开始非常流行,这款工具没有晦涩和反人类的语法,只需要简单的配置一下就可以
Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。 我们能够使用它像 Make/Ninja 那样可以直接编译项目,也可以像 CMa
环境:ubuntu16.04+xmakev2.7.2+mingw-w64 why xmake? 支持跨平台(无win编译选项) 支持C++库管理 上手快(基于lua相比cmake语法) 下载安装 此处略过 跨平台 linux-window 命令:xmake f -p PLAT -a ARCH linux 64位: xmake f -p linux -a x86_64 linux
目录 0.Intro 1. 环境搭建过程 1.1 树莓派系统安装 1.2 树莓派ssh连接准备 1.3 更改apt源 1.4 安装clang 1.5 安装eigen 1.6 安装xmake 1.7 安装opencv与opencv_contrib 1.8 摄像头设置 1.9 Github加速 1.10 测试 2 参考网站 0.Intro 最近要搞树莓派上的目标识别,装了一手opencv,折腾了不少,
xmake -f /tmp/xxx.lua xmake --file=xxx.lua 最简单: -- 添加名为`demo`的目标到工程 target("demo") -- 设置目标程序类型为二进制,一般为`控制台`的终端`命令行`程序 set_kind("binary") -- 添加`src`目录下的所有c文件 add_files("src/*.c") 更复杂点
多平台支持 Mpx支持在多个小程序平台中进行增强,目前支持的小程序平台包括微信,支付宝,百度,qq和头条,不过自2.0版本后,Mpx支持了以微信增强语法为base的跨平台输出,实现了一套业务源码在多端输出运行的能力,大大提升了多小程序平台业务的开发效率,详情可以查看template增强特性 不同平台上的模板增强指令按照平台的指令风格进行设计,文档和代码示例为了方便统一采用微信小程序下的书写方式。
问题内容: 我一直在研究基于SWT的项目,该项目旨在作为Java Web Start部署,因此可以在多个平台上使用。 到目前为止,我已经设法解决了由于SWT依赖于系统特定的库而引起的导出问题。生成的jar似乎可以在32/64位linux和64位Windows上正常运行,但是在Mac上执行失败,输出如下: 据我了解,该问题源于Mac OSX上的线程处理,因此我应该尝试在执行时实现JVM参数。这是正确
Koala是一款预处理器语言图形编译工具,支持Less、Sass、CoffeeScript、Compass framework 的即时编译。 无需手动输入命令去编译,后台监听文件是否有改变,如有修改会自动进行编译。能够大大提升 Web 开发中的工作效率。 功能特性 多语言支持 支持Less、Sass、CoffeeScript 和 Compass Framework。 实时编译 监听文件,当文件改变
要求功能相对够用,最重要是安全,如果综合好但就是只能用windows的也没问题,求指教!!!
我需要在我的应用程序中为不同的标签指定不同的FontFamily。我需要使用默认字体(如Android的Roboto和iOS的Helvetica)及其修改(如轻、中、粗)。据我所知,我应该使用Roboto-Light和Helvetica-Light来获得字体的轻版本(中号和粗体相同)。除了这个需求之外,我还需要在XAML中设置字体(如文档中所描述的),所以我最终得到了以下代码 然而,在Androi
作为第三代数据统计和分析平台,诸葛实现了对用户的实名(实账号)分析,并主张互联网产品分析以用户为中心的分析思想并提供了一系列方法论。对用户的唯一标识来源于企业自身数据库对用户的唯一识别符,也即诸葛底层数据采集是以用户为中心的采集,我们提供了跨平台分析版本, 满足企业以用户为中心的整体的分析需求,不同平台相同业务价值下的用户完整的故事解读(例如:分析电商的用户在PC端浏览产品,在移动端支付的转化率)
说明 由于在跨端开发中,必不可少的会遇到不同端需要有不同实现的情况。参考滴滴chameleon中的多态,megalo中实现了类似的跨平台兼容方案。需要使用时,请保证@megalo/target的版本号大于或等于0.7.2。 js的跨平台兼容 megalo中下面两种形式的引用会被特殊处理: [path-to-name]/[name]/index.mpjs [path-to-name]/[name]
问题内容: 我想开发一个跨平台的应用程序。 Java是跨平台的吗?我的意思是,我可以在Windows中开发Java应用程序并在Mac OS X和Linux中使用它吗? 如果是,怎么办? 我发现用Java编写的应用程序有两个安装文件,一个用于Windows,另一个用于Mac。 这使我感到困惑。 任何插图或建议将不胜感激。 问题答案: Java是跨平台的吗? 从某种意义上说,Java是跨平台的, 即已