1762_gcc编译c语言makefile自动生成工具的Perl实现

这篇具有很好参考价值的文章主要介绍了1762_gcc编译c语言makefile自动生成工具的Perl实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

全部学习汇总: GreyZhang/g_makefile: Learn makefile from all kinds of tutorials on the web. Happy hacking and let's find an common way so we may don't need to touch makefile code any more! (github.com)

         前阵子实现了一个CodeWarrior嵌入式开发环境的自动编译环境,用的基本上是Python。说起来,我觉得那个环境还是很实用的。虽说还有很多可以改进的地方,但是总觉得能用就好了,不想去做那么多的补丁。

         虽说自己从事的是汽车电子嵌入式开发,但是很多时候各种代码正确或者错误的测试我都是借助于gcc,编译一下直接打印出执行结果。虽说方法很烂,但是通常这么简单的一个功能已经足以让我去定位绝大多数的问题。不过,有时候文件多的时候确实也需要自己写个简单的makefile,一来二去,厌烦了重复劳作的我有了写个简单小工具的想法。参考之前的CodeWarrior实现,只是这次改成了Perl,因为我接触的计算机环境中Perl更为普遍适用一些。

         本次实现的功能很不完整,实用功能是最主要的指标,其他的功能能省则省。makefile的生成也只完成了文件的编译和链接功能,但是我觉得这已经足以覆盖90%以上的需求。make工具使用了gmake,从MATLAB的安装目录中找到的,gcc是安装草莓Perl时打包安装的。中间用到了一点点DOS CMD命令,测试的平台为Windows10 HB。

         我的最小工程demo如下:

         一个main.c文件,两个以文件夹划分的模块。设计的时候把所有的object文件生成在同一个文件夹,名为objects,最终可执行程序的名称在Perl程序中指定。

         原始工程目录树如下:

1762_gcc编译c语言makefile自动生成工具的Perl实现,makefile,c语言,perl,开发语言

         makefile构建功能在make.pl中实现,具体的代码如下(使用截图是为了有更好的格式与语法显示,路过感兴趣的可以自己抄一遍或者跟我联系索取,联系方式在文章开头已经提供):

1762_gcc编译c语言makefile自动生成工具的Perl实现,makefile,c语言,perl,开发语言

1762_gcc编译c语言makefile自动生成工具的Perl实现,makefile,c语言,perl,开发语言

1762_gcc编译c语言makefile自动生成工具的Perl实现,makefile,c语言,perl,开发语言

         为了能够让工程更完善一些,我把gmake加入到了环境变量,而make与clean则全都用Windows的批处理简单实现了一下。具体的测试结果如下:

1. 运行Perl程序,生成makefile

1762_gcc编译c语言makefile自动生成工具的Perl实现,makefile,c语言,perl,开发语言

生成的makefile内容如下:

CC = gcc

test_project : main.o test1.o test2.o

         gcc -o D:\workspace\Perl\maketools\test_project main.o test1.o test2.o

main.o: D:\workspace\Perl\maketools\main.c C:/Strawberry/c/i686-w64-mingw32/include/stdio.h \

 C:/Strawberry/c/i686-w64-mingw32/include/crtdefs.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_mac.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_secapi.h \

 C:/Strawberry/c/i686-w64-mingw32/include/vadefs.h \

 C:/Strawberry/c/i686-w64-mingw32/include/sdks/_mingw_directx.h \

 C:/Strawberry/c/i686-w64-mingw32/include/sdks/_mingw_ddk.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_print_push.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_off_t.h \

 C:/Strawberry/c/i686-w64-mingw32/include/swprintf.inl \

 C:/Strawberry/c/i686-w64-mingw32/include/sec_api/stdio_s.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_print_pop.h \

 D:\workspace\Perl\maketools\test1/test1.h \

 D:\workspace\Perl\maketools\test2/test2.h

         $(CC) -c -o $@ $<  -I D:\workspace\Perl\maketools -I D:\workspace\Perl\maketools\objects -I D:\workspace\Perl\maketools\test1 -I D:\workspace\Perl\maketools\test2

test1.o: D:\workspace\Perl\maketools/test1\test1.c C:/Strawberry/c/i686-w64-mingw32/include/stdio.h \

 C:/Strawberry/c/i686-w64-mingw32/include/crtdefs.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_mac.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_secapi.h \

 C:/Strawberry/c/i686-w64-mingw32/include/vadefs.h \

 C:/Strawberry/c/i686-w64-mingw32/include/sdks/_mingw_directx.h \

 C:/Strawberry/c/i686-w64-mingw32/include/sdks/_mingw_ddk.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_print_push.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_off_t.h \

 C:/Strawberry/c/i686-w64-mingw32/include/swprintf.inl \

 C:/Strawberry/c/i686-w64-mingw32/include/sec_api/stdio_s.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_print_pop.h

         $(CC) -c -o $@ $<  -I D:\workspace\Perl\maketools -I D:\workspace\Perl\maketools\objects -I D:\workspace\Perl\maketools\test1 -I D:\workspace\Perl\maketools\test2

test2.o: D:\workspace\Perl\maketools/test2\test2.c C:/Strawberry/c/i686-w64-mingw32/include/stdio.h \

 C:/Strawberry/c/i686-w64-mingw32/include/crtdefs.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_mac.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_secapi.h \

 C:/Strawberry/c/i686-w64-mingw32/include/vadefs.h \

 C:/Strawberry/c/i686-w64-mingw32/include/sdks/_mingw_directx.h \

 C:/Strawberry/c/i686-w64-mingw32/include/sdks/_mingw_ddk.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_print_push.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_off_t.h \

 C:/Strawberry/c/i686-w64-mingw32/include/swprintf.inl \

 C:/Strawberry/c/i686-w64-mingw32/include/sec_api/stdio_s.h \

 C:/Strawberry/c/i686-w64-mingw32/include/_mingw_print_pop.h

         $(CC) -c -o $@ $<  -I D:\workspace\Perl\maketools -I D:\workspace\Perl\maketools\objects -I D:\workspace\Perl\maketools\test1 -I D:\workspace\Perl\maketools\test2

         虽说这种makefile比较冗长难维护,但是其实我们的工具本来就是解决这样的问题的,只要编译能够顺利执行,我们并不需要特别在意makefile的具体内容。

2. 进行编译功能的测试

1762_gcc编译c语言makefile自动生成工具的Perl实现,makefile,c语言,perl,开发语言

         这样,简单的编译功能已经实现。

3. 编译结果执行

1762_gcc编译c语言makefile自动生成工具的Perl实现,makefile,c语言,perl,开发语言

         到此,一个简单可以用于日常代码测试的工具已经实现。值得注意的是,中间固定死了主函数所在的文件名以及位置。至于目录层级,其实这个工具支持还算是良好。文章来源地址https://www.toymoban.com/news/detail-529038.html

到了这里,关于1762_gcc编译c语言makefile自动生成工具的Perl实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】gcc/g++的使用 自动化构建工具make/makefile的使用

    在学习C语言时,我们了解了预处理阶段要做的事:-预处理 这其中会经历两个阶段: 编译和链接 而编译又分为三个阶段: 预编译,编译,汇编 通过不同的选项,可以让gcc停在以上相应的阶段。 这里有一个记忆的小窍门,我们 电脑左上角的Esc键 ,顺序刚好和上面的顺序一致

    2024年02月13日
    浏览(28)
  • 自动生成测试用例_接口测试用例自动生成工具

    写用例之前,我们应该熟悉API的详细信息。建议使用抓包工具Charles或AnyProxy进行抓包。 我们先来了解一下另一个项目har2case 他的工作原理就是将当前主流的抓包工具和浏览器都支持将抓取得到的数据包导出为标准通用的 HAR 格式(HTTP Archive),然后 HttpRunner 将 HAR 格式的数据

    2024年02月05日
    浏览(52)
  • AI自动生成代码工具

    AI自动生成代码工具是一种利用人工智能技术来辅助或自动化软件开发过程中的编码任务的工具。这些工具使用机器学习和自然语言处理等技术,根据开发者的需求生成相应的源代码。以下是一些常见的AI自动生成代码工具,希望对大家有所帮助。北京木奇移动技术有限公司,

    2024年02月04日
    浏览(32)
  • AIGC for code(AIGC/AI生成代码/生成式AI之代码生成/AI编程工具/自动编程/自动生成代码/智能编程工具/智能编程系统)

    AIGC,Artificial Intelligence Generated Content,人工智能生成内容 AIGC for code,AI生成代码 Copilot是由微软的子公司Github与openAI共同开发的人工智能(AI)驱动的编程助手。它能够直接在你的编辑器中,为你提供代码片段或者整个函数的建议,以帮助你更快地编写和完成代码。这个工具

    2024年02月17日
    浏览(67)
  • Visual Studio 2015编译器 自动生成 XXX_EXPORTS宏

    XXX_EXPORTS 宏是由Visual Studio 2015编译器自动生成的。这个宏用于标识当前项目是一个导出符号的动态链接库(DLL)项目。在使用Visual Studio 2015创建Win32项目时,编译器会自动添加这个宏到项目的预定义宏中。 这个宏的作用是在编译过程中帮助标识导出符号,以便在动态链接库中

    2024年02月15日
    浏览(35)
  • 代码自动生成工具——TableGo(实例演示)

            在SpringBoot项目开发中,为了提高开发效率,我们经常需要使用代码自动生成工具来生成一些重复性的代码,比如实体类、DAO、Service、Controller等等。下面介绍几个常用的代码自动生成工具: ①、MyBatis Generator         MyBatis Generator是由MyBatis官方提供的一个代码

    2024年02月07日
    浏览(33)
  • Unity SpriteAtlas(图集)自动生成工具

    图集是一种将多个纹理合并为一个组合纹理的资源。 可以调用此单个纹理来发出单个绘制调用而不是发出多个绘制调用,能够以较小的性能开销一次性访问压缩的纹理 减少DrawCall,一张图集只需要一次DrawCall 图集将一张或者多张图片合成一张2的幂次方的图片,减少资源大小

    2024年02月13日
    浏览(40)
  • 工具—IDEA代码自动生成插件EasyCode

    官网简介 基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)。 只要是与数据库相关的代码都可以通过自定义模板来生成。支持数据库类型与java类型映射关系配置。 支持同时生成生成多张表的代码。每张表有独立的配置信息。完全的个性化定义,

    2024年02月09日
    浏览(33)
  • 什么工具能自动生成SQL 这么牛

    哈喽,大家好。 程序猿和产品的爱恨情仇:谁也离不开谁,谁也看对方不顺眼。一个是下单的,另一个是做饭的,下单的嫌弃做饭的做的慢、不好吃还不按要求做,做饭的嫌弃下单的钱少事多要求高。┓( ´∀` )┏ 小北最近也是被一个需求恶心到,又不能改又不能砍,写起来

    2023年04月27日
    浏览(29)
  • AIGC for code(text-to-codeAIGC/AI生成代码/生成式AI之代码生成/AI编程工具/自动编程/自动生成代码/智能编程工具/智能编程系统)

    AIGC,Artificial Intelligence Generated Content,人工智能生成内容 AIGC for code,AI生成代码 Copilot是由微软的子公司Github与openAI共同开发的人工智能(AI)驱动的编程助手。它能够直接在你的编辑器中,为你提供代码片段或者整个函数的建议,以帮助你更快地编写和完成代码。这个工具

    2024年02月15日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包