36

GitHub - xmake-io/xmake: ? A cross-platform build utility based on Lua

 5 years ago
source link: https://github.com/xmake-io/xmake
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

68747470733a2f2f74626f6f782e6f72672f7374617469632f696d672f786d616b652f6c6f676f323536632e706e67

xmake

A cross-platform build utility based on Lua

Introduction (中文)

xmake is a cross-platform build utility based on lua.

The project focuses on making development and building easier and provides many features (.e.g package, install, plugin, macro, action, option, task ...), so that any developer can quickly pick it up and enjoy the productivity boost when developing and building project.

If you want to known more, please refer to:

                         _        
    __  ___ __  __  __ _| | ______ 
    \ \/ / |  \/  |/ _  | |/ / __ \
     >  <  | \__/ | /_| |   <  ___/
    /_/\_\_|_|  |_|\__ \|_|\_\____| 

                         by ruki, tboox.org

Installation

via curl

bash <(curl -fsSL https://raw.githubusercontent.com/xmake-io/xmake/master/scripts/get.sh)

via wget

bash <(wget https://raw.githubusercontent.com/xmake-io/xmake/master/scripts/get.sh -O -)

via powershell

Invoke-Expression (Invoke-Webrequest 'https://raw.githubusercontent.com/xmake-io/xmake/master/scripts/get.ps1' -UseBasicParsing).Content

Simple description

68747470733a2f2f786d616b652e696f2f6173736574732f696d672f696e6465782f73686f77636f6465312e706e67

Package dependences

68747470733a2f2f786d616b652e696f2f6173736574732f696d672f696e6465782f6164645f726571756972652e706e67

An official xmake package repository: xmake-repo

Build project

$ xmake

Run target

$ xmake run console

Debug target

$ xmake run -d console

Configure platform

$ xmake f -p [windows|linux|macosx|android|iphoneos ..] -a [x86|arm64 ..] -m [debug|release]
$ xmake

Menu configuration

$ xmake f --menu

68747470733a2f2f786d616b652e696f2f6173736574732f696d672f696e6465782f6d656e75636f6e662e706e67

Package management

68747470733a2f2f786d616b652e696f2f6173736574732f696d672f696e6465782f7061636b6167655f6d616e6167652e706e67

Supported platforms

  • Windows (x86, x64)
  • macOS (i386, x86_64)
  • Linux (i386, x86_64, cross-toolchains ...)
  • Android (armv5te, armv6, armv7-a, armv8-a, arm64-v8a)
  • iOS (armv7, armv7s, arm64, i386, x86_64)
  • WatchOS (armv7k, i386)
  • MinGW (i386, x86_64)

Supported Languages

  • C
  • C++
  • Objective-C and Objective-C++
  • Swift
  • Assembly
  • Golang
  • Rust
  • Dlang
  • Cuda

Supported Projects

  • Static Library
  • Shared Library
  • Console
  • Cuda Program
  • Qt Application
  • WDK Driver (umdf/kmdf/wdm)
  • WinSDK Application

Builtin Plugins

Macros script plugin

$ xmake m -b                        # start to record
$ xmake f -p iphoneos -m debug
$ xmake
$ xmake f -p android --ndk=~/files/android-ndk-r16b
$ xmake
$ xmake m -e                        # stop to record
$ xmake m .                         # playback commands

Run the custom lua script plugin

$ xmake l ./test.lua
$ xmake l -c "print('hello xmake!')"
$ xmake l lib.detect.find_tool gcc

Generate IDE project file plugin(makefile, vs2002 - vs2017 .. )

$ xmake project -k vs2017 -m "debug,release"

Generate doxygen document plugin

$ xmake doxygen [srcdir]

More Plugins

Please download and install from the plugins repository xmake-plugins.

IDE/Editor Integration

problem.gif

problem.gif

problem.gif

More Examples

Debug and release modes:

add_rules("mode.debug", "mode.release")

target("console")
    set_kind("binary")
    add_files("src/*.c") 
    if is_mode("debug") then
        add_defines("DEBUG")
    end

Download and use remote packages:

add_requires("libuv master", "ffmpeg", "zlib 1.20.*")
add_requires("tbox >1.6.1", {optional = true, debug = true})
add_requires("brew::pcre2/libpcre2-8", {alias = "pcre2"})
add_requires("conan::OpenSSL/1.0.2n@conan/stable", {alias = "openssl"}) 
target("test")
    set_kind("shared")
    add_files("src/*.c")
    add_packages("libuv", "ffmpeg", "tbox", "zlib", "pcre2", "openssl")

Find and use local packages:

target("test")
    set_kind("shared")
    add_files("src/*.c")
    on_load(function (target)
        target:add(find_packages("zlib", "openssl", "brew::pcre2/libpcre2-8", "conan::OpenSSL/1.0.2n@conan/stable"))
    end)

Project Examples

Some projects using xmake:

Example Video

68747470733a2f2f61736369696e656d612e6f72672f612f3133333639332e706e67

Contacts

Thanks

This project exists thanks to all the people who have contributed: 68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f636f6e7472696275746f72732e7376673f77696474683d38393026627574746f6e3d66616c7365

  • TitanSnow: provide the xmake logo and install scripts
  • uael: provide the semantic versioning library sv

Backers

Thank you to all our backers! ? [Become a backer]

68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f6261636b6572732e7376673f77696474683d383930

Sponsors

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f73706f6e736f722f302f6176617461722e737667 68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f73706f6e736f722f312f6176617461722e737667 68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f73706f6e736f722f322f6176617461722e737667 68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f73706f6e736f722f332f6176617461722e737667 68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f73706f6e736f722f342f6176617461722e737667 68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f73706f6e736f722f352f6176617461722e737667 68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f73706f6e736f722f362f6176617461722e737667 68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f73706f6e736f722f372f6176617461722e737667 68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f73706f6e736f722f382f6176617461722e737667 68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f786d616b652f73706f6e736f722f392f6176617461722e737667


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK