tcc编译器教程4 使用make管理编译lua解释器过程

本文介绍使用make调用tcc编译lua解释器过程,感觉在win下使用make的教程好少啊。

1 基本格式

Makefile的基本格式如下,简单理解是生成[目标],如果[目标]文件存在,则不运行该编译命令,如果[目标]文件不存在,则检查[依赖…],如果依赖存在则直接执行[编译指令],若依赖不存在,则调用依赖文件编译命令,以此类推。

[目标]:[依赖...]
	[编译指令...]

简单例子如下:

#编译lua解释器
#标签,编译目标为lua.exe执行文件
#下面接编译指令,注意编译指令前面又加一个tab键,不能加空格.
lua.exe:
	rem 注释,编译指令
	tcc *.c -o lua.exe
	echo 编译成功
	

输入下面指令即可执行

::不输入其他参数,即直接执行第一个编译[目标]文件
make
::等价于下面命令,即生产lua.exe可执行文件
make lua.exe
::若此前已生成过lua.exe文件,则会显示make: 'lua.exe' is up to date.
::即已经存在编译目标,相关指令不会运行,需先del lua.exe删除文件

2 多个编译选项

使用make一个主要目的就是使用单独一个Makefile文件提供多个编译选项,若使用批处理命令,提供类似的功能,但是比较复杂需要编写编译逻辑。下面将前文编译lua的过程写成Makefile脚本

# 编译lua解释器的Makefile


# 定义变量other_c,用于静态链接和动态链接
other_c = lapi.c lcode.c lctype.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c ltable.c ltm.c lundump.c lvm.c lzio.c lauxlib.c lbaselib.c  lcorolib.c ldblib.c liolib.c lmathlib.c loslib.c lstrlib.c ltablib.c loadlib.c linit.c lutf8lib.c


# 编译lua.exe文件,默认指令,调用[link]编译指令
# 无论当前目录下是否存在lua.exe文件,均可重新进行编译
build:link
	echo 生成lua.exe成功!

# 编译lua.exe文件
# 若当前目录下有lua.exe文件,则不会编译
lua.exe:
	tcc -c *.c
	tcc *.o -o lua.exe

# 运行lua.exe程序
# 当lua.exe未编译,会先调用[lua.exe]指令生成lua.exe
run:lua.exe
	.\lua.exe
	
#只编译,生成obj文件
compile:
	tcc -c *.c
	echo 编译成功!
	
# 进行链接,会先调用[compile]指令
link:compile
	tcc *.o -o lua.exe
	echo 链接成功!

# 生成静态链接库并生成lua.exe,使用到变量other_c
lib:
	tcc -r  $(other_c)   -o liblua.a
	tcc  liblua.a lua.c -o lua.exe
	echo 生成静态链接库并生成lua.exe

# 生成动态链接库并生成lua.exe,使用到变量other_c
dll:
	tcc $(other_c) -shared -rdynamic -o lua.dll
	tcc  lua.def lua.c -o lua.exe
	echo 生成动态链接库并生成lua.exe

# 显示lua的版本
v:lua.exe
	.\lua.exe -v

# 清除所有编译产生的文件
clean:
	if exist lua.exe del lua.exe
	if exist *.o del *.o
	if exist liblua.a del liblua.a
	if exist lua.dll del lua.dll
	if exist lua.def del lua.def

3 参考

Makefile入门(超详细一文读懂)-CSDN博客
https://blog.csdn.net/ZBraveHeart/article/details/123187908
GNU Make Manual - GNU Project - Free Software Foundation
https://www.gnu.org/software/make/manual/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值