欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > tcc编译器教程5 进一步优化Makefile文件

tcc编译器教程5 进一步优化Makefile文件

2025/3/10 11:16:40 来源:https://blog.csdn.net/sinat_41629921/article/details/146139003  浏览:    关键词:tcc编译器教程5 进一步优化Makefile文件

本文将进一步优化前文编写的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 ------------------------------------

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词