在windows下用makefile编译exe(一)

您所在的位置:网站首页 c如何编译exe 在windows下用makefile编译exe(一)

在windows下用makefile编译exe(一)

2023-08-14 22:57| 来源: 网络整理| 查看: 265

前情提要

自动化测试的项目开发,基于windows所提供的api接口,编写,生成exe可执行文件,配合python测试脚本,进行自动化的代码功能测试。在py自动化测试的过程中,根据不同的测试用例,需要不断去修改源测试代码的测试宏接口,然后编译为可执行文件。这个过程中,需要用到自动化编译makefile。

软件&环境

主机系统:windows7 虚拟linux环境:cygwin64 开发ide:code::blocks make编译使用的GNU:MinGW:gcc,g++

开发语言

测试程序的开发语言:C语言面向对象 自动化编译脚本编写:makefile;shell;bat

碰到的通用问题 1.makefile的target通配符自动展开失败

沿用原有工程的框架,还没具体探究,待搞明白后再来补充

2.cygwin64的linux环境启动十分缓慢

原有的cygwin64的组件安装的太多了,导致每次使用到linux,都会去启动环境,环境启动又慢,就使得整个编译卡住许久不动。 这里分享两个解决办法,一个治标,一个治本:

治标 在cygwin64的路径下,找到 cygwin64\usr\sbin\cygserver.exe ,双击打开,然后再打开linux环境,第一次启动还是很慢,但是只要不关闭这个server的进程,后续再使用到linux环境时,都是秒开,类似于把环境常驻RAM的功能,不过占用空间不大,就几兆。 在这里插入图片描述

治本 卸载删除原有的cygwin,重新安装,在安装时只安装需要的组件,如果是进行makefile的编译,还有平时使用 Cygwin64 Terminal 开发调试的话,只需要安装Base,Deval,Shells,这三个组件。 安装完成后打开,不出意外就是秒开环境的! 在这里插入图片描述

3.makefile编译缓慢

make 后面添加 -j 参数可以调用多线程进行编译,会大大加快速度,实测一个下位机的工程,不加 -j 编译用时 62s ,添加 -j 参数后编译用时 34s 。

#调用多线程编译后,会占用大量的cpu运算资源,甚至全部,故需要结合实际使用场景具体配置此参数 make -j #-j 后可添加数字,配置调用的线程 make -j4 4.bat脚本闪退

bat脚本在执行过程完make操作后,需要判断最终的目标文件是否生成,这里用exist指令,但是在实际运行过程中,脚本运行到这里会闪退,代码片段如下:

if exist ..\release\*.exe ( echo makefile 完成 ) else ( echo makefile 失败 )

在两个判断的分支中添加pause指令使其暂停调试查看,发现可以正常暂停。

if exist ..\release\*.exe ( echo makefile 完成 pause ) else ( echo makefile 失败 pause )

后又查询了一下类似的问题,但是在CSDN上面没找到类似的,在观察了几个关于if exist语法讲解的例子后,发现他们的分支执行语句是顶格写的,一下就让我想到**if else **这个语句在使用时需要好几个不能缺的空格。

Windows下批处理if exist用法的注意事项

if exist ..\release\*.exe ( echo makefile完成 ) else ( echo makefile失败 )

修改代码后再次执行,OK了,不会闪退了。 刚才在写这个博客的时候试了下,分支语句echo前面加Tab,又不会闪退了…… 😥

5.环境变量问题

自动编译的脚本环境中涉及到几个path路径,需要添加在系统变量或者环境变量中,这个操作换了电脑环境,不能让人工去操作,肯定也是要通过脚本实现。

set GNU_PATH=C:\MinGW\bin set WINDOWS_PATH=C:\Windows\System32 set LINUX_PATH=C:\cygwin64\bin #将路径添加到环境变量的path,追加在原有path后面,此操作只对当前的操作窗口有效,不会影响系统中的变量 set path=%path%;%GNU_PATH%;%WINDOWS_PATH%;%LINUX_PATH%

将此配置指令置于自动编译脚本头部,完美解决需要手动添加路径的问题。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3