xmake 介绍
具体介绍看:xmake介绍 github项目地址:xmake项目地址 xmake wiki:xmake 中文文档
安装注意事项
C/C++编译器
这里我用的是 MinGW,但不是在线安装的那种,而是把最新版本的CodeBlock安装上,再把CB安装目录中的mingw拷贝出来,单独使用CB已经做好的解压版的mingw,再把其中的mingw-make.exe改名为make.exe,最后把mingw\bin添加到path,基本上没什么大问题。
xmake 安装
下载之后,双击install.bat,会提示你安装路径,写上安装路径即可。 PS:最好在安装之前提前创建好安装目录,不要打开和你安装路径有关的任何东西,不然可能会安装不成功!
demo 走起
创建项目
关于创建项目的具体细节在wiki上很详细,这里我就复制一下了事:
xmake提供了一些常用工程模板,可以很方便的创建一些空工程。
创建一个c++ console项目:
xmake create -l c++ -t 1 demo
or xmake create --language=c++ --template=1 demo
创建一个c静态库项目:
xmake create -l c -t 5 demo
or xmake create --language=c --template=5 demo
创建一个c动态库项目:
xmake create -t 3 demo
or xmake create --template=3 demo
默认语言是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
根据文档,我创建了如下项目
D:\code\cpp\emacs\xmake\demo>tree /f
卷 软件 的文件夹 PATH 列表
卷序列号为 1862-B919
D:.
│ xmake.lua
│
├─.xmake
│ │ xmake.conf
│ │
│ └─cache
│ config
│ history
│
└─src
main.c
D:\code\cpp\emacs\xmake\demo>
其中的main.c内容:
#include <stdio.h>
int sum( int a, int b );
int main(int argc, char** argv)
{
int a = 0;
int b = 0;
printf("hello world!\n");
printf("输入两个整数:");
scanf("%d %d",&a,&b);
printf("%d + %d = %d\n",a,b,sum(a,b));
return 0;
}
int sum( int a, int b ){
return a + b;
}
编译:
根据wiki提示,如果你在windows上,但是不想用vs或者需要进行交叉编译(如此高大上的东西-_-#!),那么你需要指定本次编译应用于哪个架构。在我的电脑上,我需要在编译前进行的配置只有一句话:
xmake f -p mingw --sdk=D:\\program\\cpp\\MinGW\\bin
其中 xmake 是 xmake的程序的名字, f 是config的简写,-p mingw指定编译平台,--sdk=D:\program\cpp\MinGW\bin指定编译器的位置,然后具体的编译也只需要一句话:
D:\code\cpp\emacs\xmake\demo>dir
驱动器 D 中的卷是 软件
卷的序列号是 1862-B919
D:\code\cpp\emacs\xmake\demo 的目录
2016/07/10 10:03 <DIR> .
2016/07/10 10:03 <DIR> ..
2016/07/10 09:32 <DIR> .xmake
2016/07/10 08:36 <DIR> src
2016/07/10 08:36 542 xmake.lua
1 个文件 542 字节
4 个目录 280,756,871,168 可用字节
D:\code\cpp\emacs\xmake\demo>tree /f
卷 软件 的文件夹 PATH 列表
卷序列号为 1862-B919
D:.
│ xmake.lua
│
├─.xmake
│ │ xmake.conf
│ │
│ └─cache
│ config
│ history
│
└─src
main.c
D:\code\cpp\emacs\xmake\demo>xmake
configure
{
ex = "ar"
, ccache = false
, host = "windows"
, sdk = "D:\\\\program\\\\cpp\\\\MinGW\\\\bin"
, buildir = "build"
, as = "gcc"
, toolchains = "D:\\program\\cpp\\MinGW\\bin"
, arch = "i386"
, mode = "release"
, cxx = "g++"
, cross = "i386-mingw32-"
, plat = "mingw"
, kind = "static"
, ar = "ar"
, ld = "g++"
, cc = "gcc"
, sh = "g++"
}
configure ok!
[00%]: compiling.release src\main.c
[100%]: linking.release demo.exe
build ok!
D:\code\cpp\emacs\xmake\demo>tree /f
卷 软件 的文件夹 PATH 列表
卷序列号为 1862-B919
D:.
│ xmake.lua
│
├─.xmake
│ │ xmake.conf
│ │
│ └─cache
│ config
│ history
│
├─build
│ │ demo.exe
│ │
│ └─.objs
│ └─demo
│ └─src
│ main.obj
│
└─src
main.c
D:\code\cpp\emacs\xmake\demo>
这里我把整个编译过程贴了出来,具体编译时,用到的指令是:xmake 是的,没有任何附带条件,只有一个单词即可,不需要手写任何配置文件
运行
D:\code\cpp\emacs\xmake\demo>xmake r demo
configure
{
ex = "ar"
, ccache = false
, host = "windows"
, ar = "ar"
, buildir = "build"
, as = "gcc"
, toolchains = "D:\\program\\cpp\\MinGW\\bin"
, arch = "i386"
, mode = "release"
, cxx = "g++"
, cross = "i386-mingw32-"
, plat = "mingw"
, kind = "static"
, sh = "g++"
, cc = "gcc"
, sdk = "D:\\\\program\\\\cpp\\\\MinGW\\\\bin"
, ld = "g++"
}
configure ok!
[100%]: linking.release demo.exe
build ok!
hello world!
输入两个整数:1 2
1 + 2 = 3
D:\code\cpp\emacs\xmake\demo>
这个运行是墨迹了一点,不过还可以接受
完事 or not
还有待深入了解xmkae之后,看看怎么链接自定义的头文件,怎么创建和使用库等等。
多目录程序
我的程序目录
D:\gitosc\my-compiler\SingleList>tree /f
卷 软件 的文件夹 PATH 列表
卷序列号为 1862-B919
D:.
│ .cproject
│ .gitignore
│ .project
│ xmake.lua
│
├─.xmake
│ │ xmake.conf
│ │
│ └─cache
│ config
│ history
│
└─src
│ main.cpp
│
└─cal
cal.cpp
cal.h
D:\gitosc\my-compiler\SingleList>
xmake.lua
程序很简单就不在写了,主要是xmake.lua。我的xmake.lua内容如下
-- the debug mode
if is_mode("debug") then
-- enable the debug symbols
set_symbols("debug")
-- disable optimization
set_optimize("none")
end
-- the release mode
if is_mode("release") then
-- set the symbols visibility: hidden
set_symbols("hidden")
-- enable fastest optimization
set_optimize("fastest")
-- strip all symbols
set_strip("all")
end
-- add target
target("slist")
-- set kind
set_kind("binary")
-- add files
add_files("src/**.cpp")
add_headers("src/**.h")
和自动生成的xmake.lua相比,我把add_files("src/*.cpp") 修改为了:add_files("src/**.cpp"),然后加入头文件也是差不多的。根据文档,也可以如下写法[只写了添加文件]:
add_files("src/*.cpp")
add_files("src/cal/*.cpp")
add_headers("src/cal/*.h")
不过对于我目前的程序来说,就用第一种就可以