从GNU makefile调用Windows命令(例如del)

从GNU makefile调用Windows命令(例如del),第1张

概述从GNU makefile调用Windows命令(例如del)

它似乎不可能使用GNU Make调用windows系统命令(例如del,move等)。 我试图创build一个不依赖于用户有额外的工具(例如从Cygwin的rm.exe )安装的生成文件。

当运行以下规则时,报告错误del: command not found :

clean: del *.o

这大概是因为没有“del”这样的可执行的东西。 我也尝试运行它作为cmd的选项,但这似乎只是打开一个新的提示:

clean: cmd /C del *.o

我使用的windows XP(5.1.2600)与GNU Make 3.79.1捆绑在一起作为MSys的一部分。

Makefile – 找不到共享库

为Lua for Windows构buildluafilesystem

Makefile.am …那些是什么?

我怎样才能为我所有的linux内核编译设置默认的Makefile标志?

CMakeLists无法find新安装的HDF5?

为什么可以在这里工作?

Apache 2.4.1未定义引用'SSLv2_clIEnt_method'

makefile – 转义括号

与&符号在最后和没有

qmake:使卸载尝试删除包含使用INSTALLS安装的文件的系统文件夹

看起来/C开关需要被转义,因为/被解释为GNU Make中的路径。 以下工作如预期:

clean: cmd //C del *.o

你在用Cygwin吗? 为什么不叫rm ?

del是cmd.exe的内置命令(以及之前的command.com )。 你的命令cmd /C del *.o应该工作,如果它启动一个新的命令提示符我怀疑,cmd也许可能是一个包装。 您是否尝试过使用完整路径调用cmd(例如c:/windows/system32/cmd.exe)?

因为基于DOS的系统有两个不同的命令来删除文件和目录,我发现有两个不同的定义是最好的:

ifeq ($(OS),windows_NT) RM = cmd //C del //Q //F RRM = cmd //C rmdir //Q //S else RM = rm -f RRM = rm -f -r endif clean: $(RM) $(TARGET).elf $(TARGET).map $(RRM) $(BUILD_DIR)

Tom LongrIDge的回答对我来说是非常接近真实的,但是我需要在windows Vista商业机器上使用正斜杠之前使用反斜杠来进行转义:

RM=cmd /C del

另一个解决方案是创建一个del.bat文件,其中包含:

@echo off del %*

那么makefile可以简单地包含

clean: del *.o

这清理了makefile,但可能会混乱你的建立目录。

也发生在我身上。 在makefile的顶部添加:

SHELL=cmd

既然你在windows上编译,选择'cmd'作为默认的shell。 这很重要,因为GNU make会搜索类似于linux / unix的shell的路径,如果找到它,它将会使用它。 这是cygwin安装时的情况。 这种行为的副作用是找不到像'del'和'echo'这样的命令。 如果我们告诉GNU make使用'cmd'作为shell,那么'del'就可以使用。

总结

以上是内存溢出为你收集整理的从GNU makefile调用Windows命令(例如del)全部内容,希望文章能够帮你解决从GNU makefile调用Windows命令(例如del)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1209548.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存