一个自动生成Makefile的简单脚本
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。
发表评论: