本文将进一步优化前文编写的Makefile文件
1 使用@隐藏指令
可以在编译命令前面加@即可不显示相关命令而只是显示输出内容,这样显示的内容比较简洁。
build:link@echo 生成lua.exe成功!
如上面编译命令执行过程不会显示出来而是显示输出生成lua.exe成功!
2 使用@rem进行注释
在编译语句中无法使用#进行注释,会提示错误,如
build:link#编译语句中不能这么写注释,执行会提示错@echo 生成lua.exe成功!
执行会提示下面错误
process_begin: CreateProcess(NULL, #编译语句中不能这么写注释,执行会提示错, …) failed.
make (e=2): 系统找不到指定的文件。
make: *** [Makefile:11: build] Error 2
正确写法应该是使用@rem
build:link@rem 注释@echo 生成lua.exe成功!
此外@rem还有一个作用就是作为一个空指令使用,如
build:@rem
因为每个标签下面至少需要一个语句,如果不加则会报错
3 添加一个帮助页面
这份Makefile已经包含了许多编译选项,添加一个帮助页面容易使用,使用make help进行调用
help:@echo ------------------------------------@echo 这是一个使用tcc编译lua的Makefile脚本,具体用法如下@echo make-生成直接生成lua.exe@echo make build-生成直接生成lua.exe@echo make lua.exe-若没有lua.exe生成lua.exe@echo make run-运行lua.exe@echo make compile-编译所有c代码@echo make link-链接所有c代码@echo make lib-生成静态链接库并生成lua.exe@echo make dll-生成动态链接库并生成lua.exe@echo make clean-清除所有编译文件@echo make v-显示lua版本@echo ------------------------------------
4 添加中文选项
经过测试,编译选项实际上也可以使用中文表示,有时候还是挺方便的,不用记得英文单词怎么拼写.如
# 中文化选项
# 实际上主要依靠执行依赖项build,编译指令为空指令
构建:build@rem
5 添加一个中文帮助
类似英文选项帮助,添加一个中文选项帮助,使用make 帮助 调用
帮助:@echo ------------------------------------@echo 这是一个使用tcc编译lua的Makefile脚本@echo 下面主要介绍中文指令用法,英文用法见make help@echo make 构建-生成直接生成lua.exe@echo make 运行-运行lua.exe@echo make 编译-编译所有c代码@echo make 链接-链接所有c代码@echo make 静态-生成静态链接库并生成lua.exe@echo make 动态-生成动态链接库并生成lua.exe@echo make 清除-清除所有编译文件@echo make v-显示lua版本@echo ------------------------------------
6 汇总
将上面改进内容进行汇总,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@rem 注释@echo 生成lua.exe成功!# 编译lua.exe文件
# 若当前目录下有lua.exe文件,则不会编译
lua.exe:@tcc -c *.c@tcc *.o -o lua.exe@echo 生成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@echo 清除所有编译产生的文件成功help:@echo ------------------------------------@echo 这是一个使用tcc编译lua的Makefile脚本,具体用法如下@echo make-生成直接生成lua.exe@echo make build-生成直接生成lua.exe@echo make lua.exe-若没有lua.exe生成lua.exe@echo make run-运行lua.exe@echo make compile-编译所有c代码@echo make link-链接所有c代码@echo make lib-生成静态链接库并生成lua.exe@echo make dll-生成动态链接库并生成lua.exe@echo make clean-清除所有编译文件@echo make v-显示lua版本@echo 中文用法见make 帮助@echo ------------------------------------# 中文化选项
# 实际上主要依靠执行依赖项build,编译指令为空指令
构建:build@rem
运行:run@rem
编译:compile@rem
链接:link@rem
静态:lib@rem
动态:dll@rem
清除:clean@rem
版本:v@rem
帮助:@echo ------------------------------------@echo 这是一个使用tcc编译lua的Makefile脚本@echo 下面主要介绍中文指令用法,英文用法见make help@echo make 构建-生成直接生成lua.exe@echo make 运行-运行lua.exe@echo make 编译-编译所有c代码@echo make 链接-链接所有c代码@echo make 静态-生成静态链接库并生成lua.exe@echo make 动态-生成动态链接库并生成lua.exe@echo make 清除-清除所有编译文件@echo make 版本-显示lua版本@echo ------------------------------------