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

Tom*_*dge 8 windows makefile

似乎不可能使用GNU Make调用Windows系统命令(例如del,move等).我正在尝试创建一个不依赖于安装了额外工具(例如rm.exe来自Cygwin)的用户的makefile .

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

clean:
   del *.o
Run Code Online (Sandbox Code Playgroud)

这可能是因为没有像"del"这样的可执行文件.我也尝试将它作为一个选项运行cmd但是这只是打开一个新的提示:

clean:
    cmd /C del *.o
Run Code Online (Sandbox Code Playgroud)

我正在使用Windows XP(5.1.2600)和GNU Make 3.79.1捆绑在一起作为MSys的一部分.

Tom*_*dge 11

似乎/C转换需要转义,因为a /被解释为GNU Make中的路径.以下按预期工作:

clean:
    cmd //C del *.o
Run Code Online (Sandbox Code Playgroud)


J P*_*J P 5

因为基于 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)
Run Code Online (Sandbox Code Playgroud)


jes*_*scf 5

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

SHELL=cmd
Run Code Online (Sandbox Code Playgroud)

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