Skip to content

v1.5.x编译

ruki edited this page Nov 5, 2015 · 13 revisions

编译

新版本采用全新xmake自动构建框架进行编译,详情参见:

xmake的安装和使用

使用

详细的编译过程见上述的链接,不过一般情况下,编译只需要执行:

xmake 

使用xmake编译完tbox后,可以执行下面的命令,对tbox进行打包:

# 打包输出到默认目录:tbox/build
xmake p

# 打包输出到指定目录
xmake p -o outdir

打包完成后,会在输出目录自动生成一个名叫 tbox.pkg的包,其目录结构如下:

tbox.pkg
.
├── inc
│   ├── android
│   │   └── tbox.config.h
│   ├── iphoneos
│   │   └── tbox.config.h
│   ├── iphonesimulator
│   │   └── tbox.config.h
│   ├── macosx
│   │   └── tbox.config.h
│   ├── windows
│   │   └── tbox.config.h
│   └── tbox
├── lib
│   ├── debug
│   │   ├── android
│   │   │   └── armv7-a
│   │   │       └── libtbox.a
│   │   ├── iphoneos
│   │   │   └── armv7
│   │   │       └── libtbox.a
│   │   ├── iphonesimulator
│   │   │   └── x86_64
│   │   │       └── libtbox.a
│   │   ├── macosx
│   │   │   └── x86_64
│   │   │       └── libtbox.a
│   │   └── windows
│   │       └── i386
│   │           └── tbox.lib
│   └── release
│       ├── android
│       │   └── armv7-a
│       │       └── libtbox.a
│       ├── iphoneos
│       │   └── armv7
│       │       └── libtbox.a
│       ├── iphonesimulator
│       │   └── x86_64
│       │       └── libtbox.a
│       ├── macosx
│       │   └── x86_64
│       │       └── libtbox.a
│       └── windows
│           └── i386
│               └── tbox.lib
└── xmake.lua

每次打包,会把当前指定编译平台的文件放置到对应目录,想要上述平台更加全面,只需要对每个平台都进行编译打包一边就行了。

inc/tbox 为tbox的头文件,inc/windows/tbox.config.h这些是每个平台下的tbox的相关配置头文件,也需要被包含。

所以使用tbox.config.h,有两种方法:

  • 添加一个配置文件的搜索路径,例如inc/windows/,让其能自动找到相关平台对应的tbox.config.h
  • 如果你只需要一个平台,例如windows,那么更简单的方式只需要把inc/windows/tbox.config.h复制到inc/tbox下面就行了

在代码中引用tbox头文件只需要包含一个总的头文件就行了,因为tbox的所有头文件都是相对路径自包含的(除了tbox.config.h),例如:

#include "tbox/tbox.h" 

如何链接库就不多说了,需要注意的一点是,如果当前链接的是debug的版本,那么整个工程里面需要定义一个全局的宏开关:__tb_debug__,这个是必须的,而release版本就不需要任何开关了。

下面给个最简单使用tbox的空工程代码:

#include "tbox/tbox.h" 

int main(int argv, char** argv)
{
    // 初始化整个tbox库环境,这个是必须的,但是只需要在程序最开始执行一下
    if (!tb_init(tb_null, tb_null, tb_null, 0)) return 0;

    // 打印输出,需要自己加换行符
    tb_printf("hello world!\n");

    // 只在debug下打印输出一行
    tb_trace_d("hello world");

    // 在debug/release下打印输出一行
    tb_trace_i("hello world");

    // debug下进行断言检测
    tb_assert(1 == 1);
    tb_assert_abort(1 != 2);

    // 空等待
    getchar();

    // 退出整个tbox环境,这步会释放tbox占用的所有资源,如果是debug版本,还会在终端输出内存泄露检测信息等等。
    tb_exit();
    return 0;
}

详细的断言和输出使用见:打印输出断言与检测

注:在windows下vs中使用 tbox 需要额外注意的一点是,vs的c编译器只支持c89的语法,而tbox的最低支持标准也是c99以后的,所以用c89的编译器是编译不过的,包含tbox.h的头文件,编译器也会报错。

因此,想要在vs中使用tbox,需要采用c++编译,可以直接在*.cpp的文件中使用tbox,或者在使用tbox的*.c的文件采用/TP选项,强制作为c++来编译。。

Clone this wiki locally