Xmake is a lightweight modern C/C++ project build tool based on Lua. Its main features are: easy to use syntax, more readable project maintenance, and a consistent build experience across platforms.
This article focuses on how to create a xmake-based project and compilation operations.
Creating an empty project
Xmake provides the
xmake create command, which makes it easy to quickly create empty projects in various languages such as c/c++, swift, objc, such as:
$ xmake create test create test ... [+]: xmake.lua [+]: src/main.cpp [+]: .gitignore create ok!
By default, a c++ hello world project is created, and a xmake.lua is generated in the root directory to describe the project’s build rules.
add_rules("mode.debug", "mode.release") target("test") set_kind("binary") add_files("src/*.cpp")
This is a very simple xmake.lua description,
target("test") defines a sub-project module test, each target will generate a corresponding object file, the binary type here, specify to create a basic executable file.
mode.release rule settings are optional, but we usually recommend adding them so that the default two common build modes are available: debug and release.
Usually if we just compile the executable file of the current host environment, we only need to execute the xmake command:
$ xmake checking for the Xcode directory ... /Applications/Xcode.app assessment for the SDK version of Xcode ... 10.15 [0%]: ccache compiling.release src/main.cpp [100%]: linking.release test
Xmake will detect the existing build environment of the current environment by default, such as the author’s current xcode environment, and then compile by default release mode. If the
mode.release rule is set, it will take effect.
Compile mode switch
And if we want to cut to
mode.debug compile, we only need to:
$ xmake f -m debug $ xmake
xmake f is a shorthand for the
xmake config command, which is used to quickly switch the configuration. If you start with it, it is more convenient to use shorthand. The shorthand for more commands can be executed by
Create another template project
xmake create can also be used to create various other types of engineering projects, we can type
xmake create --help to see:
$ xmake create --help Usage: $xmake create [options] [target] Create a new project. Options: -l LANGUAGE, --language=LANGUAGE The project language (default: c++) - c++ - go - dlang - cuda - rust - swift - objc - c - objc++ -t TEMPLATE, --template=TEMPLATE Select the project template id or name of the given language. (default: console) - console: c++, go, dlang, cuda, rust, swift, objc, c, objc++ - qt.console: c++ - qt.quickapp: c++ - qt.quickapp_static: c++ - qt.shared: c++ - qt.static: c++ - qt.widgetapp: c++ - qt.widgetapp_static: c++ - shared: c++, dlang, cuda, c - static: c++, go, dlang, cuda, rust, c - tbox.console: c++, c - tbox.shared: c++, c - tbox.static: c++, c Target Create the given target. Uses the project name as target if not exists.
From the help menu above, we can probably understand that the engineering language can be specified by
-t/--template is used to specify the type of project template.
For example, let’s create a static library project based on c:
$ xmake create -l c -t static test create test ... [+]: xmake.lua [+]: src/interface.c [+]: src/interface.h [+]: src/test.c [+]: src/main.cpp [+]: .gitignore create ok!
We can also create qt-based quickapp projects:
$ xmake create -l c++ -t qt.quickapp test create test ... [+]: xmake.lua [+]: src/interface.c [+]: src/main.qml [+]: src/interface.h [+]: src/test.c [+]: src/main.cpp [+]: src/qml.qrc [+]: .gitignore create ok!
In addition to the c/c++ project, xmake also supports project compilation in other languages, but xmake focuses on c/c++. Other languages are supported mainly to support mixed compilation with c/c++. After all, other languages have official rust to rust. Provide a better build solution.
But we can still use xmake to try to compile them:
$ xmake create -l rust test create test ... [+]: xmake.lua [+]: src/main.rs [+]: .gitignore create ok!
$ xmake checking for the architecture ... x86_64 checking for the Xcode directory ... /Applications/Xcode.app assessment for the SDK version of Xcode ... 10.15 [0%]: linking.release test