1.下载源码编译安装

  • 在线源码
  • 在线文档

makefile中有默认编译完成的安装路径:

prefix:=$(if $(prefix),$(prefix),$(if $(findstring /usr/local/bin,$(PATH)),/usr/local,/usr))

由于不想安装在系统中,修改为安装到当前目录(安装在系统目录的好处就是可以直接使用xmake命令不用带目录也不用配置环境变量):

prefix=.

下面是自带编译的makefile,里面可以看见对各种平台的支持:

# is debug?
debug  :=n
verbose:=#debug  :=y
#verbose:=-v# prefix
#prefix:=$(if $(prefix),$(prefix),$(if $(findstring /usr/local/bin,$(PATH)),/usr/local,/usr))
prefix=.# platform
PLAT        :=$(if $(PLAT),$(PLAT),$(if ${shell uname | egrep -i linux},linux,))
PLAT        :=$(if $(PLAT),$(PLAT),$(if ${shell uname | egrep -i darwin},macosx,))
PLAT        :=$(if $(PLAT),$(PLAT),$(if ${shell uname | egrep -i cygwin},cygwin,))
PLAT        :=$(if $(PLAT),$(PLAT),$(if ${shell uname | egrep -i mingw},mingw,))
PLAT        :=$(if $(PLAT),$(PLAT),$(if ${shell uname | egrep -i windows},windows,))
PLAT        :=$(if $(PLAT),$(PLAT),linux)# architecture
ifeq ($(ARCH),)ARCH         :=$(if $(findstring windows,$(PLAT)),x86,$(ARCH))
ARCH        :=$(if $(findstring mingw,$(PLAT)),x86,$(ARCH))
ARCH        :=$(if $(findstring macosx,$(PLAT)),x$(shell getconf LONG_BIT),$(ARCH))
ARCH        :=$(if $(findstring linux,$(PLAT)),x$(shell getconf LONG_BIT),$(ARCH))
ARCH        :=$(if $(findstring x32,$(ARCH)),i386,$(ARCH))
ARCH        :=$(if $(findstring x64,$(ARCH)),x86_64,$(ARCH))
ARCH        :=$(if $(findstring iphoneos,$(PLAT)),armv7,$(ARCH))
ARCH        :=$(if $(findstring android,$(PLAT)),armv7,$(ARCH))endifxmake_dir_install   :=$(prefix)/share/xmake
xmake_core          :=./core/src/demo/demo.b
xmake_core_install  :=$(xmake_dir_install)/xmake
xmake_loader        :=/tmp/xmake_loader
xmake_loader_install:=$(prefix)/bin/xmaketip:@echo 'Usage: '@echo '    $ make build'@echo '    $ sudo make install [prefix=/usr/local]'build:@echo compiling xmake-core ...@if [ -f core/.config.mak ]; then rm core/.config.mak; fi@$(MAKE) -C core --no-print-directory f DEBUG=$(debug)@$(MAKE) -C core --no-print-directory c@$(MAKE) -C core --no-print-directoryinstall:@echo installing to $(prefix) ...@echo plat: $(PLAT)@echo arch: $(ARCH)@# create the xmake install directory@if [ -d $(xmake_dir_install) ]; then rm -rf $(xmake_dir_install); fi@if [ ! -d $(xmake_dir_install) ]; then mkdir -p $(xmake_dir_install); fi@# install the xmake core file@cp $(xmake_core) $(xmake_core_install)@chmod 777 $(xmake_core_install)@# install the xmake directory@cp -r xmake/* $(xmake_dir_install)@# make the xmake loader@echo '#!/bin/bash' > $(xmake_loader)@echo 'export XMAKE_PROGRAM_DIR=$(xmake_dir_install)' >> $(xmake_loader)@echo '$(xmake_core_install) $(verbose) "$$@"' >> $(xmake_loader)@# install the xmake loader@if [ ! -d $(prefix)/bin ]; then mkdir -p $(prefix)/bin; fi@mv $(xmake_loader) $(xmake_loader_install)@chmod 777 $(xmake_loader_install)@# remove xmake.out@if [ -f '/tmp/xmake.out' ]; then rm /tmp/xmake.out; fi@# ok@echo ok!uninstall:@echo uninstalling from $(prefix) ...@if [ -f $(xmake_loader_install) ]; then rm $(xmake_loader_install); fi@if [ -d $(xmake_dir_install) ]; then rm -rf $(xmake_dir_install); fi@echo ok!test:@xmake lua --backtrace tests/test.lua $(name)@echo ok!.PHONY: tip build install uninstall

执行命令make build,就完成了编译:

执行命令make install,就安装到当前目录了:

编译完成了,主程序xmake在bin里面,使用./bin/xmake -h看看帮助:

2.使用模板生成工程

使用命令模板可以创建不同的工程,下面是不同的选项:

默认语言是c, 后面的-t和--template参数指定的是需要创建的模板类型,目前只支持console、静态库、动态库三种模板,后续还会支持:application等app应用程序模板。

-l LANGUAGE, --language=LANGUAGE       The project language (default: c)
                                               - c
                                               - c++
                                               - objc
                                               - objc++
                                               - swift
    -t TEMPLATE, --template=TEMPLATE       Select the project template id of the given language. (default: 1)
                                               - language: c
                                                 1. The Console Program
                                                 2. The Console Program (tbox)
                                                 3. The Shared Library
                                                 4. The Shared Library (tbox)
                                                 5. The Static Library
                                                 6. The Static Library (tbox)
                                               - language: c++
                                                 1. The Console Program
                                                 2. The Console Program (tbox)
                                                 3. The Shared Library
                                                 4. The Shared Library (tbox)
                                                 5. The Static Library
                                                 6. The Static Library (tbox)
                                               - language: objc
                                                 1. The Console Program
                                               - language: objc++
                                                 1. The Console Program
                                               - language: swift
                                                 1. The Console Program

创建一个控制台工程:

创建一个动态库工程:

创建一个静态库工程:

生成工程的目录结构是如下:

工程创建好了以后,里面就有了一个xmake.lua的编译脚本,动态库和静态库还有一个测试demo

-- the debug mode
if is_mode("debug") then-- enable the debug symbolsset_symbols("debug")-- disable optimizationset_optimize("none")
end-- the release mode
if is_mode("release") then-- set the symbols visibility: hiddenset_symbols("hidden")-- enable fastest optimizationset_optimize("fastest")-- strip all symbolsset_strip("all")
end-- add target
target("console")-- set kindset_kind("binary")-- add filesadd_files("src/*.cpp") 
-- the debug mode
if is_mode("debug") then-- enable the debug symbolsset_symbols("debug")-- disable optimizationset_optimize("none")
end-- the release mode
if is_mode("release") then-- set the symbols visibility: hiddenset_symbols("hidden")-- enable fastest optimizationset_optimize("fastest")-- strip all symbolsset_strip("all")
end-- add target
target("console2")-- set kindset_kind("static")-- add filesadd_files("src/interface.cpp") -- add target
target("console2_demo")-- set kindset_kind("binary")-- add depsadd_deps("console2")-- add filesadd_files("src/test.cpp") 
-- the debug mode
if is_mode("debug") then-- enable the debug symbolsset_symbols("debug")-- disable optimizationset_optimize("none")
end-- the release mode
if is_mode("release") then-- set the symbols visibility: hiddenset_symbols("hidden")-- enable fastest optimizationset_optimize("fastest")-- strip all symbolsset_strip("all")
end-- add target
target("console3")-- set kindset_kind("shared")-- add filesadd_files("src/interface.cpp") -- add target
target("console3_demo")-- set kindset_kind("binary")-- add depsadd_deps("console3")-- add filesadd_files("src/test.cpp") 

从这3个lua脚本我们可以看出,创建不同类型的工程,就是set_kind这个类型不一样了。

选一个动态库工程看看生成的代码:

#ifdef __cplusplus
extern "C" {
#endif#if defined(_WIN32)
#   define __export         __declspec(dllexport)
#elif defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
#   define __export         __attribute__((visibility("default")))
#else
#   define __export
#endif/*! calculate add(a, b) ** @param a     the first argument* @param b     the second argument** @return      the result*/
__export int    add(int a, int b);#ifdef __cplusplus
}
#endif
#include "interface.h"int add(int a, int b)
{return a + b;
}
#include "interface.h"
#include <iostream>using namespace std;int main(int argc, char** argv)
{cout << "add(1, 2) = " << add(1, 2) << endl; return 0;
}

3.使用lua脚本编译

使用xmake命令分别编译3个工程,由于我不是安装在系统目录,也没有配置环境变量,所以执行的时候要带目录:

4.lua脚本例子

-- project
set_project("xmake")-- version
set_version("2.1.7", {build = "%Y%m%d%H%M"})-- set xmake min version
set_xmakever("2.1.6")-- set warning all as error
set_warnings("all", "error")-- set language: c99, c++11
set_languages("c99", "cxx11")-- disable some compiler errors
add_cxflags("-Wno-error=deprecated-declarations", "-fno-strict-aliasing", "-Wno-error=nullability-completeness")-- add defines
add_defines("_GNU_SOURCE=1", "_FILE_OFFSET_BITS=64", "_LARGEFILE_SOURCE")-- set the symbols visibility: hidden
set_symbols("hidden")-- strip all symbols
set_strip("all")-- fomit the frame pointer
add_cxflags("-fomit-frame-pointer")-- for the windows platform (msvc)
if is_plat("windows") then -- add some defines only for windowsadd_defines("NOCRYPT", "NOGDI")-- link libcmt.libadd_cxflags("-MT") -- no msvcrt.libadd_ldflags("-nodefaultlib:\"msvcrt.lib\"")
end-- for mode coverage
if is_mode("coverage") thenadd_ldflags("-coverage", "-fprofile-arcs", "-ftest-coverage")
end-- add projects
includes("src/sv","src/luajit", "src/tbox", "src/xmake", "src/demo")

5.参考资料

http://blog.csdn.net/earbao/article/details/52238568

c++构建工具之xmake使用实例相关推荐

  1. 前端构建工具 Gulp.js 上手实例

    在软件开发中使用自动化构建工具的好处是显而易见的.通过工具自动化运行大量单调乏味.重复性的任务,比如图像压缩.文件合并.代码压缩.单元测试等等,可以为开发者节约大量的时间,使我们能够专注于真正重要的. ...

  2. c++构建工具之shell,configure,make,cmake,scons,xmake简析总结

    前言 说到编译工具,在windows下必言vs,在linux下必言make. 0.shell 如果编译一个库的命令太复杂或者为了方便,我们更愿意将编译命令写成一个shell脚本来执行,比如build. ...

  3. 前端构建工具之争——Webpack vs Gulp 谁会被拍死在沙滩上

    阅读目录 理想的前端开发流程 Gulp 为何物 webpack 又是从哪冒出来的 结论 文章有点长,总共 1800 字,阅读需要 18 分钟.哈哈,没耐心的直接戳我到高潮部分. 理想的前端开发流程 在 ...

  4. [BuildRelease]跨平台构建工具Cmake

    一 CMake CMake 是一个跨平台的构建工具,通过一次的cmake script的编写,能够生成常见平台常见IDE的project文件或maikefile文件,例如生成visual studio ...

  5. Gradle构建工具的学习与使用

    http://my.eoe.cn/william_sim/archive/10691.html Gradle 是以 Groovy 语言为基础,面向Java应用为主.基于DSL(领域特定语言)语法的自动 ...

  6. 时下最流行前端构建工具Webpack 入门总结

    作者:wenjuanrao,腾讯 PCG 前端开发工程师 最近梳理了下以前 webpack 的相关开发经验,整理和总结了一份入门笔记,欢迎大家围观和批评指正. 随着 web 应用越来越复杂和庞大,前端 ...

  7. ant构建项目迁移到gradle_Gradle构建工具

    构建工具的作用:依赖管理:测试.打包.发布:机器能干的活,绝不自己动手. 主流构建工具: (1)Ant:编译.测试.打包: (2)Maven:依赖管理.发布: (3)Gradle:Groovy,具有更 ...

  8. 从零实现Vue的组件库(零)- 基本结构以及构建工具

    今年三月份入职以来,一直在做后台运营系统,其中重复性工作有很多,其中组件库就是一项.尽管现阶段有很多优秀的开源组件库,但是为了适应产品奇奇怪怪的需求,还是要手动实现一些组件.将其沉淀下来,积累一些自己 ...

  9. 前端构建工具与应用程序测试

    1.前端构建工具 什么是前端构建? 什么是构建工具? 自动构建工具 Npm Scripts(推荐) Npm Scripts(NPM脚本)是一个任务执行者.NPM是安装Node时附带的一个包管理器,Np ...

最新文章

  1. E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)E: U
  2. ansible 学习笔记
  3. Fedora开机自动登录指定用户(root或普通用户)
  4. 【spider】Tesseract机器视觉实现验证码识别
  5. springboot+mybatis日志显示SQL
  6. 浏览器报错:DNS_PROBE_FINISHED_BAD_CONFIG
  7. JAVA之多线程概念及其几种实现方法优劣分析
  8. ios网络相关问题-HTTP特点
  9. 运用c语言和Java写九九乘法表
  10. 移动硬盘上安装Windows 10系统
  11. 斑马打印机linux驱动安装教程,win7系统安装斑马打印机驱动的操作方法
  12. 传统企业连接互联网的五种方式
  13. 跟Nature学SCI图片高级配色
  14. html表格怎么取消自动换行,css怎么控制表格不要自动换行?
  15. (附源码)计算机毕业设计SSM旅游分享平台
  16. 数据结构:设线性表中每个元素有两个数据项k1和k2,现对线性表按一下规则进行排序:先看数据项k1,k1值小的元素在前,大的在后;在k1值相同的情况下,再看k2,k2值小的在前,大的在后。满足这种要求的
  17. 一年外包经验入职字节
  18. 基于时延法的麦克风阵列声源定位分析
  19. html代码正方形变椭圆,椭圆伸缩变换公式
  20. HTML常用实体符号

热门文章

  1. onbeforeedit和onbeginedit数据不一致_Rrbind.fill|列数不一致的多个数据集“智能”合并,Get!...
  2. v-model详细使用
  3. java集合(6):TreeMap源码分析(jdk1.8)
  4. 浅谈Spring框架注解的用法分析
  5. CVPR 2013 录用论文(目标跟踪部分)
  6. 数据结构之Treap
  7. 小游戏“终结者”程序的设计与实现
  8. Deep Learning源代码收集-持续更新…
  9. 2015年北京国电通面试题
  10. Mysql 使用下载的zip文件进行安装启动