问题来源

  因为笔者想用GCC编译器进行Windows下的C语言编程,安装了Mingw-w64的x86_64-posix-seh版本,并按照Visual Studio Code官方的教程,将Mingw-w64的bin目录正确添加到了环境变量path中,cmd下可调用gcc、gdb等指令。

  后来又遇到多文件编译问题,笔者百度之后发现Mingw-w64自带了make工具。不过这个make工具的名字是mingw32-make.exe(bin目录下)。于是,笔者按照网上的做法,将其复制到同一目录下并改名为make.exe。由于bin目录已经添加到环境变量中,这样操作之后,cmd下就可以直接使用make指令了。

  笔者使用Visual Studio Code作为代码编辑器,并直接在Terminal窗口中敲命令编译、运行程序,一切正常。花了好大力气入门了makefile文件的编写之后,笔者调用make指令,也能正确链接编译,得到正确的程序。

  然而,当笔者敲下make clean删除.o文件时,Terminal提示错误:系统找不到指定文件。

  

  这是笔者拙劣的makefile代码:

main.exe : main.o func.o
gcc main.o func.o -o main.exe main.o : main.c hstd.h
gcc -c main.c func.o : func.c hstd.h
gcc -c func.c clean :
rm main.exe,main.o,func.o

   这段代码没有明显的语法语义错误,完全符合makefile的规则和Windows下Powershell的语法规则,可问题确实存在。以管理员身份运行Powershell之后,问题依然没有解决。

解决之路

   在bing和百度上搜索这个问题,花了大半天的时间,不论是在csdn还是博客园抑或是其他小网站上,都没有找到合适的解决方案。

   偶然间,笔者注意到一个网站没有尝试过,那就是笔者这边访问速度奇慢无比的Stackoverflow。。。

   结果,笔者在Stackoverflow上找到了问题的根源:

  

   原来make.exe使用的不是Powershell而是cmd!!!

    试验时候发现,cmd下果然默认不能调用rm指令:

  

   Powershell下可以(小技巧:这里rm不加参数直接按回车键可以添加多个要删除的目录/文件,如果不输入任何东西再按一次回车就可以退出rm回到shell):

  

  于是笔者简单修改了makefile文件(就把rm换成cmd下能调用的del):

main.exe : main.o func.o
gcc main.o func.o -o main.exe main.o : main.c hstd.h
gcc -c main.c func.o : func.c hstd.h
gcc -c func.c clean :
del main.exe,main.o,func.o

  VSCode的Terminal中敲下make clean,没有报错。

  

  还是那句话:make.exe使用的不是Powershell而是cmd!!!

最新文章

  1. ASP.NET MVC5 网站开发实践(二) Member区域 - 用户部分(2)用户登录、注销
  2. json,pickle
  3. [读书笔记]OSGI-灵活的类加载器架构
  4. Ajax基础实例
  5. 内网渗透中的反弹Shell与端口转发
  6. linux命令(12)uniq去重
  7. Spring3+MyBatis3整合log4j无法输出SQL语句问题的解决
  8. mysql-1862、1820、java.sql.SQLException: Your password has expired. To log in you must change it using a client that supports expired passwords.
  9. Weblogic 部署注意事项
  10. 链接分析算法之:HITS算法
  11. Iterator、for..of,for...in和自定义遍历器**
  12. 【1414软工助教】团队作业8——第二次项目冲刺(Beta阶段) 得分榜
  13. ElasticSearch 学习记录之如任何设计可扩容的索引结构
  14. 解决Apache Web Server的几个错误
  15. k8s重要概念及部署k8s集群(一)--技术流ken
  16. 怎么在linux下创建一个可运行脚本?
  17. opencv: 排序
  18. Codeforces Round #313 (Div. 2) C. Gerald's Hexagon(补大三角形)
  19. .Net 常用插件及第三方库
  20. 微信小程序-下拉事件(onPullDownRefresh)不触发

热门文章

  1. 题解 SP1812 【LCS2 - Longest Common Substring II 】
  2. ‘100%’wuxiao
  3. docker时区不正确的问题修改记
  4. iframe和DataForm
  5. Spring学习之Spring中AOP方式切入声明式事务
  6. luogu P4775 [NOI2018]情报中心 线段树合并 虚树 树的直径trick
  7. 一本通 高手训练 1781 死亡之树 状态压缩dp
  8. luogu P1526 [NOI2003]智破连环阵 搜索+最大匹配+剪枝
  9. x86架构:保护模式下利用中断实现抢占式多任务运行
  10. linux的文件处理(匹配 正则表达式 egrep awk sed)和系统、核心数据备份