首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现gnu-make不能删除windows上的文件。

实现gnu-make不能删除windows上的文件。
EN

Stack Overflow用户
提问于 2022-07-09 10:50:58
回答 1查看 173关注 0票数 0

我正在使用mingw32实现gnu-make将C++应用程序从Linux移植到Windows。

mingw32-make.exe可以正确编译应用程序,就像在Linux上一样,但出于某些原因,clean命令不起作用。makefile的相关部分是:

代码语言:javascript
复制
#Where temporary object files are stored
ODIR=obj
#Where the final application is stored
OUTDIR=bin
OUTNAME=application.exe

...

.PHONY: clean

clean:
    rm -Force ./$(OUTDIR)/$(OUTNAME)
    rm -Force ./$(ODIR)/*.o

在windows终端中键入mingw32-make clean将提供以下输出。

代码语言:javascript
复制
rm -Force ./bin/application.exe
process_begin: CreateProcess(NULL, rm -Force ./bin/application.exe, ...) failed.
make (e=2): The system cannot find the file specified.
makefile:37: recipe for target 'clean' failed
mingw32-make: *** [clean] Error 2

但是,如果我手动输入命令,它的工作原理是完全正确的:

代码语言:javascript
复制
rm -Force ./bin/application.exe
rm -Force ./obj/*.o

然后有问题的文件就不见了。

但这正是mingw32-make所说的不可能,我知道问题不在于常量OUTDIRODIROUTNAME是错误的,因为mingw32-make可以很好地编译程序并将其放置在正确的位置。

有什么区别,使没有权限删除文件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-09 17:18:58

或者使用像MSYS2这样的bash支持*nix命令行rm,或者更改您的Makefile以检测它是否正在运行,或者使用del代替rm。最好的方法是为检测到的构建平台设置一个正确的删除命令变量。

如果您用其他人编写的源代码编译了许多项目,那么MSYS2 shell是您最简单的选择,因为它不需要对Makefile进行任何更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72920746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档