在Windows 10上使用Makefile运行批处理文件时找不到命令

问题描述

当我尝试运行运行批处理文件的makefile(在终端中键入“ make test”)时,我得到了等效的错误

cd directory_path && test.bat
/bin/sh: test.bat: command not found
make: *** [makefile:58: test] Error 127

makefile是:

.PHONY: test
test:
    cd directory_path && test.bat
    python path/test.py

(我更改了批处理文件名称目录路径等,以使事情更通用)

我可以手动键入“ cd directory_path”,然后键入“ test.bat”,两者都可以工作。该makefile在其他系统上可以使用。它仅对我的无效。我认为这与我如何安装Cygwin和如何运行“ make.exe”有关。

我可以使用make来编译C代码,但是尝试使用make运行python脚本时也会出错。之前的makefile也有一个用于python path / test.py的命令。这在我的系统上也不起作用。如果删除批处理文件行,但保留python命令,则会引发错误

python path/test.py
make: python: No such file or directory
make: *** [makefile:59: test] Error 127.

我不明白为什么它会抛出没有这样的文件或目录的错误,因为路径指向文件,并且如果我将python脚本放在与makefile相同的工作目录中,那么它仍然找不到

有关这些问题的任何想法/解决方案?谢谢!

编辑:

道格·亨德森: 我在带有make文件的地方启动了cmd提示符,并在其中输入了所有这些命令

uname -a
CYGWIN_NT-10.0 james-mobl2 3.1.6(0.340/5/3) 2020-07-09 08:20 x86_64 Cygwin

which make
/usr/bin/make

make -v
GNU Make 4.3
Built for x86_64-pc-cygwin
copyright (C) 1988-2020 Free Software Foundation,Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY,to the extent permitted by law.

which python
which: no python in
(/cygdrive/c/Program Files/AdoptOpenJDK/jdk-8.0.252.09-hotspot/bin:
/cygdrive/c/windows/system32:
/cygdrive/c/windows:
/cygdrive/c/windows/System32/Wbem:
/cygdrive/c/windows/System32/WindowsPowerShell/v1.0:
/cygdrive/c/windows/System32/OpenSSH:
/cygdrive/c/Program Files/Git/cmd:
/cygdrive/c/Users/james/AppData/Local/Microsoft/WindowsApps/python:
/cygdrive/c/Program Files/PuTTY:
/usr/bin:
/cygdrive/c/Program Files/AdoptOpenJDK/jdk-8.0.252.09 hotspot/bin:
/cygdrive/c/Users/james/AppData/Local/Microsoft/WindowsApps)

(我对输出进行了一些整理以使其更清晰)。这和哪个test.bat是唯一失败的命令。

python -V
Python 3.8.5

更改目录已正确更改

which test.bat
which: no test.bat in 
(/cygdrive/c/Program Files/AdoptOpenJDK/jdk-8.0.252.09-hotspot/bin:
/cygdrive/c/windows/system32:
/cygdrive/c/windows:
/cygdrive/c/windows/System32/Wbem:
/cygdrive/c/windows/System32/WindowsPowerShell/v1.0:
/cygdrive/c/windows/System32/OpenSSH:
/cygdrive/c/Program Files/Git/cmd:
/cygdrive/c/Users/james/AppData/Local/Microsoft/WindowsApps/python:
/cygdrive/c/Program Files/PuTTY:
/usr/bin:
/cygdrive/c/Program Files/AdoptOpenJDK/jdk-8.0.252.09 hotspot/bin:
/cygdrive/c/Users/james/AppData/Local/Microsoft/WindowsApps)

我在制作文件添加cmd /c test.bat,它可以正常工作,但是我也使批处理文件在不同的系统上运行而没有添加。我在实际的makefile中也有很多批处理文件,因此此解决方案有效,但并不理想。它也没有解决无法运行的python脚本。

最初我的路径中没有cmd.exe,但是我在输入这些命令之前将其添加了。

我不确定用/usr/bin;/bin;THE_REST在bash中启动我的PATH是什么意思

MadScientist: 我是手动将其输入Windows终端。 Cygwin是否可以调用Windows command.com shell?

我所做的是转到包含makefile的目录。通过在地址栏中键入“ cmd”来打开Windows终端。然后输入“ make test”。显然导致了问题。然后,我仔细检查并手动输入了我认为该makefile应该调用的命令。所以我输入了“ cd directory_path && test.bat”。跑了。

Matzeri: 我真的不知道我对POSIX完全陌生。我猜我正在使用Windows风格,从其他响应来看,我正在尝试使用Cygwin来执行非POSIX风格。

谢谢大家的回应!

解决方法

  1. 确保cygwin与基本软件包一起安装->一些未与cygwin一起安装的基本软件包,请尝试下面的链接来安装一些基本软件包,卸载cygwin并使用以下基本软件包重新安装: https://wiki.usask.ca/display/MESH/Running+Python+from+the+Cygwin+Terminal#RunningPythonfromtheCygwinTerminal-Cygwin

  2. 确保将cygwin的bin文件夹添加到您的环境变量中(例如C:\ cygwin64 \ bin)

,

如果4-0 רמה有效,则cmd /c test.bat可能不在您的PATH中。要在当前目录中运行某些内容,请始终执行.。除非您自行设置,否则永远不要指望PATH。还要确保该文件是可执行文件。 ./test.bat