GMake Echo无法正常工作,掉落反斜杠(\)

时间:2015-05-07 16:53:37

标签: windows gnu-make

我在让GMake工作时遇到了问题。截至上周末,情况还不错。我将我的编译器重新安装到这台机器上的一个新位置并运行了一个快速(成功)的构建,但从那时起就没有构建任何东西。

目前,GMake的输出如下:

IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt
IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt Cleaning Build Folders IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt
IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt
IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt
IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt Cleaning Dependencies Folder...

...并以以下错误结束

process_begin: CreateProcess(NULL, del \F .\Output\dep*.dep, ...) failed.
make (e=2): The system cannot find the file specified.
gmake: *** [clean_files] Error 2

我的makefile的相关部分如下。

@echo *********************************************
@echo ****      Cleaning Build Folders         ****
@echo *********************************************
@echo **
@echo ** Cleaning Dependencies Folder...
@$(REMOVE) .\Output\dep\*.dep
@echo ** Cleaning Objects Folder...
@$(REMOVE) .\Output\obj\*.o
@echo ** Cleaning Generated Assembly Files Folder...
@$(REMOVE) .\Output\asm\*.asm    
@echo ** Cleaning Release Folder...
@$(REMOVE) .\Release\*.elf
@echo ** Cleaning Finished
@echo **
@echo **
@echo *********************************************

我认为它可能与我的系统配置有关,因为这是我见过这种类型问题的唯一系统,同样的makefile / setup对其他用户有效。 Echo可以自行运行(当我在标准命令提示符下键入' echo test'测试'回显到窗口时,IE可以正常工作)

1 个答案:

答案 0 :(得分:0)

输出中有两件事情很奇怪。

制作配方行:

@echo *********************************************
@echo ****      Cleaning Build Folders         ****
@echo *********************************************
@echo **
@echo ** Cleaning Dependencies Folder...

正在产生以下输出:

IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt
IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt Cleaning Build Folders IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt
IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt
IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt
IDE LSL Lib MCAL_CA MCAL_DB Output Release Source build buildall.bat cleanall.bat compile_window.bat config_ca intro.bat project.pj test.txt Cleaning Dependencies Folder...

这一行:

@$(REMOVE) .\Output\dep\*.dep

正在触发包含del \F .\Output\dep*.dep的错误。 (假设$(REMOVE)包含del \F。)

第一个输出奇怪的解释是shell将** globs扩展到文件名列表。

第二个奇怪的原因是shell移除了一个转义反斜杠(即echo foo\*bar产生foo*bar作为输出等。)

makefile显然没有考虑到这些行为中的任何一种。

鉴于这是Windows,似乎有理由认为要使用的SHELLcmd.exe而不是任何shell(例如sh / bash)似乎目前正在运行命令。

事实证明,确实是这种情况意味着在makefile中设置SHELL=cmd.exe可以解决问题。本手册讨论了在Choosing the Shell部分中在Windows上选择shell。