簡體   English   中英

使用 makefile 在 Windows 上運行批處理文件時找不到命令 10

[英]command not found when using makefile to run batch file on Windows 10

當我嘗試運行運行批處理文件的 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 相同的工作目錄中,那么它仍然找不到它。

關於這些問題的任何想法/解決方案? 謝謝!

編輯:

Doug Henderson:我在 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)

(我稍微清理了 output 以使其更清晰)。 This 和 which 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 並且它起作用了,但我也讓批處理文件在沒有添加的情況下在不同的系統上運行。 我在實際 makefile 中也有很多批處理文件,因此此解決方案有效但並不理想。 它還沒有修復 python 腳本未運行的問題。

我的路徑中最初沒有 cmd.exe,但我在輸入這些命令之前添加了它。

我不確定您在 bash 中使用/usr/bin;/bin;THE_REST啟動我的 PATH 是什么意思

MadScientist:我手動將其輸入到 Windows 終端。 是否可以讓 Cygwin 調用 Windows 命令。com shell?

我所做的是 go 到包含 makefile 的目錄。通過在地址欄中鍵入“cmd”打開 windows 終端。 然后我會輸入“進行測試”。 這顯然導致了問題。 然后我通過並手動輸入了我認為 makefile 應該調用的命令。 所以我輸入了“cd directory_path && test.bat”。 這跑了

馬策里:我真的不知道。 我對 POSIX 等完全陌生。我猜我正在使用 Windows 樣式,並且從其他響應來看,我正在嘗試使用 Cygwin 來執行非 POSIX 樣式。

謝謝大家的回復!

  1. 確保 cygwin 與基本包一起安裝 --> 一些沒有與 cygwin 一起安裝的基本包嘗試下面的鏈接來安裝一些基本的 package,卸載 cygwin 並使用以下基本的 package 重新安裝: https://wiki.usask.ca/display /MESH/運行+Python+from+the+Cygwin+Terminal#RunningPythonfromtheCygwinTerminal-Cygwin

  2. 確保將 cygwin 的 bin 文件夾添加到您的環境變量中(例如,C:\cygwin64\bin)

如果cmd /c test.bat有效,那么. 可能不在您的路徑中。 當你想在當前目錄中運行某些東西時,總是執行./test.bat 除非您自己設置,否則永遠不要指望 PATH。 還要確保該文件是可執行的。 chmod +x test.bat

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM