标准C/C++程序的构建方案

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")

不过对于我目前的程序来说,就用第一种就可以

转载于:https://my.oschina.net/iamhere/blog/709173

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值