一个自动生成Makefile的简单脚本

2017-8-22 Plan C Lua

blog.kurukurumi.com原创,转载请注明出处。

E-mail:hubenchang0515@outlook.com


        用Lua写了一个自动生成Makefile的小脚本,项目地址:https://github.com/hubenchang0515/quickmake.lua

        

        这个脚本的功能非常简单,仅仅根据用户编写的脚本检查依赖的库文件,然后扫描源文件引用的头文件,确认库文件和源文件存在,头文件可找到后生成Makefile。

        库文件的检查可以通过ld命令实现,例如:

ld -l SDL2

        头文件的扫描则可以通过gcc的-M参数实现件,例如:

gcc -M main.c


        将quickmake放入PATH中即可使用,使用时用户需要编写一个脚本来告诉quickmake源文件和依赖的库等。

        例如下面这个脚本可以生成用来编译Lua的Makefile:

-- 设置编译器和编译参数
SetCompiler("gcc")
SetFlags("-O2 -W -Wall -fPIC -DLUA_USE_LINUX")

-- 设置需要链接的库
AddLib("readline")
AddLib("m")
AddLib("dl")

-- 添加源文件
AddFiles("lapi.c      lcorolib.c  ldump.c   llex.c      lopcodes.c  lstrlib.c  luac.c \
		lauxlib.c   lctype.c    lfunc.c   lmathlib.c  loslib.c    ltable.c   lundump.c \
		lbaselib.c  ldblib.c    lgc.c     lmem.c      lparser.c   ltablib.c  lutf8lib.c \
		lbitlib.c   ldebug.c    linit.c   loadlib.c   lstate.c    ltm.c      lvm.c \
		lcode.c     ldo.c       liolib.c  lobject.c   lstring.c   lua.c      lzio.c")

-- 设置目标和依赖,链接.o文件生成liblua.a的静态库
SetTarget.A("liblua.a","lapi.o      lcorolib.o  ldump.o   llex.o      lopcodes.o  lstrlib.o \
			lauxlib.o   lctype.o    lfunc.o   lmathlib.o  loslib.o    ltable.o   lundump.o \
			lbaselib.o  ldblib.o    lgc.o     lmem.o      lparser.o   ltablib.o  lutf8lib.o \
			lbitlib.o   ldebug.o    linit.o   loadlib.o   lstate.o    ltm.o      lvm.o \
			lcode.o     ldo.o       liolib.o  lobject.o   lstring.o   lzio.o")

-- 设置目标和依赖,链接lua.o和liblua.a生成lua
SetTarget.OUT("lua","lua.o liblua.a")

-- 设置目标和依赖,链接luac.o和liblua.a生成luac
SetTarget.OUT("luac","luac.o liblua.a")


        假设上面脚本的文件名为make.lua,在命令行中运行quickmake make.lua即可生成Makefile。

发表评论:

Powered by emlog
鄂ICP备16003833号