Skip to content

ZhUyU1997/XBuild

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 

Repository files navigation

XBuild (v0.2)

XBuild是一个基于Makefile的构建框架,旨在提供轻量级的编译功能。目前支持多线程,增量编译,配置。

Usage

  • 编译
make
make -j8        #多线程编译
make O=Build    #将生成文件导出到Build目录
  • 清除目标
make clean

Examples

根目录执行make可运行所有examples

  • Hello XBuild (examples/hello)
sinclude ../../scripts/env.mk

NAME        :=  hello
SRC         +=  main.c

导入XBuild,通常只需要在顶层Makefile设置

sinclude ../../scripts/env.mk

定义最终目标

NAME        :=  hello

添加需要编译的源码

SRC         +=  main.c
  • 静态库/动态库 (examples/library)
sinclude ../../scripts/env.mk

#TARGET_TYPE    :=	shared
TARGET_TYPE :=  static
NAME        :=  hello
SRC         +=  hello.c

指定TARGET_TYPEstatic/shared,目标输出为静态库/动态库

默认为binary(参考Hello XBuild)。static会将hello改为libhello.ashared会将hello改为libhello.so或libhello.dll

  • 自定义命令 (examples/custom)

如果定义了CUSTOM_TARGET_CMD,最终目标会保持为原始名字,即便设置了TARGET_TYPE

sinclude ../../scripts/env.mk

NAME        :=  hello.bin
SRC         +=  main.c

define CUSTOM_TARGET_CMD
echo [CUSTOM TARGET] $@
$(CC) $(X_CFLAGS) $(X_CPPFLAGS) $(X_OBJS) -o $@ $(X_LDFLAGS) $(X_LDLIBS)
endef
  • 编译器flags使用 (examples/flags)
sinclude ../../scripts/env.mk

X_DEFINES   +=  HELLO=1 #定义HELLO宏,等效代码(#define HELLO 1)
X_CFLAGS    +=  -std=c11 #设置C语言标准为C11

NAME        :=  hello
SRC         +=  main.c

最终命令为:

gcc -std=c11 -DHELLO=1 examples/flags/main.c.o -o examples/flags/hello

所有flags如下:

X_ASFLAGS   #汇编器命令行参数
X_CFLAGS    #C编译器命令行参数
X_LDFLAGS   #链接器命令行参数
X_LIBDIRS   #库路径(e.g. libs)
X_LIBS      #依赖库(e.g. hello)
X_DEFINES   #预处理宏定义(e.g. DEBUG=1)
X_INCDIRS   #预处理头文件路径(e.g. include)
X_INCS      #预处理包含头文件(e.g. include/config.h)

X_CPPFLAGS  <- X_INCDIRS + X_DEFINES + X_INCS
#预处理命令行参数(e.g. -I include -DDEBUG=1 -include include/config.h)
X_LDLIBS    <- X_LIBDIRS + X_LIBS
#链接器链接库命令行参数(e.g. -Llibs -lhello)

X_CPPFLAGSX_LDLIBS会自动将数据加工为编译器可以识别的命令行参数,可以避免用户繁琐的字符串处理,这也意味用户不应该主动设置这些变量。

  • 模块化 (examples/module)
sinclude scripts/env.mk
MODULE      +=  moduleA
MODULE      +=  moduleB
MODULE      +=  moduleC

moduleA: moduleB
moduleB: moduleC

定义了三个模块,moduleA依赖moduleBmoduleB依赖moduleC

moduleA

define CUSTOM_AFTER_BUILD #结束build执行此命令
echo [MOUDLE A]
endef

模块化支持意味着每个Makefile都是等价的,即便是顶层Makefile

联系

QQ:891085309

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published