web-dev-qa-db-ja.com

Makefileエラーmake(e = 2):指定されたファイルが見つかりません

Windowsでmakefileを使用して、Unixサーバー上のいくつかのファイルをプッシュしています(ここでは、makefileの同じフォルダーにあるテキストファイル「blob.txt」)。私のmakefileスクリプトは次のとおりです。

setup:
        pscp blob.txt username@hostname:/folder/

コマンドプロンプトを起動し、blob.txtとmakefileが存在するフォルダーに移動して、次のように入力します。

make setup

結果:

pscp blob.txt username@hostname:/folder/
process_begin: CreateProcess(NULL, pscp blob.txt username@hostname:/folder/, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [setup] Error 2

#fail ...では、コマンドプロンプトにコマンドを直接入力した場合:

pscp blob.txt username@hostname:/folder/

それは動作します...私は本当になぜだろうか。

13
Colonel Beauvel

エラー

process_begin: CreateProcess(NULL, pscp blob.txt username@hostname:/folder/, ...) failed.
make (e=2): The system cannot find the file specified.

windowsがpscpを見つけられないと不満を言っていることはほぼ確実です。

%PATH%(または何でも)の値がdifferentであるため、これはほぼ確実です。makeがシェル/コンソールをスポーンし、その後手動で開いたときです。

値を比較して確認します。次に、メイクファイルレシピでpscpへのフルパスを使用するか、PATHの値がmakeの使用に対して正しく設定されていることを確認します。

12
Etan Reisner

私の場合、bash.exeとsh.exeを含む%PATH%にgit\binがありました。PATHから%GIT_HOME%\binを削除するとうまくいきました

6
user3869623

@ user3869623のソリューションは私のために機能します。写真を完成させるために私の詳細を共有したいと思います。

私のメイクファイルには以下のターゲットが含まれています:

clean:
    @echo '$(OS)'
ifeq ($(OS),Windows_NT)
    del /s *.o *.d *.elf *.map *.log
endif

make cleanを実行すると、次のエラーが表示されます。

enter image description here

echoで問題が発生したと書かれているため、makefileターゲットを以下に変更します。

clean:

ifeq ($(OS),Windows_NT)
    del /s *.o *.d *.elf *.map *.log
endif

今回は、make cleanから次のエラーが表示されます。

enter image description here

Windowsコマンドラインで作業しているので、ここにbashが表示されて驚いています。

次に、%PATH%を確認しました。次のエントリが表示されます。

C:\DevTools\Git\bin

そのパスにはbash.exesh.exeがあります。そのため、このエントリを削除しましたが、現在は正常に機能しています。

しかし、私はまだこれがなぜバッシュなのか分からないのですか?

ADD 1

C:\DevTools\Git\bin%PATH%に表示される理由については、私はSublimeを使用しており、Gitバイナリを常に要求するためです。

enter image description here

5
smwikipedia

私はこれが答えられた古い質問であることを知っています、しかし、私がそうするだろうと思って、まだこれに出くわしている誰のための私の経験でも。私は同じ謎のエラーを受け取っていましたBeaubel大佐(ただし、pscpではなくwindowsのMOVEコマンドを使用):

process_begin: CreateProcess(NULL, move /y foo\bar.c .\baz.c, ...) failed.
make (e=2): The system cannot find the file specified.

CIは同じMakefileを実行し、完全に機能していました。 CIはmingw32-makeを使用し、GNU makeを使用していたことが判明しました。 GNU make(無関係なバルクパッケージの一部としてインストールされた)をアンインストールし、mingw32-makeを「make」にエイリアスすることは完全に機能します。

5
TobyK

User3869623の応答に基づいて作成します。

私の場合、bash.exeとsh.exeを含む%PATH%にgit\binがありました。PATHから%GIT_HOME%\ binを削除するとうまくいきました

この推奨事項によりmakeの実行が許可される場合がありますが、特にmakefileがgitリポジトリからソフトウェアをインストールしている場合、gitに問題が発生する可能性があります。

より良い解決策は、単に%GIT_HOME%\binから%GIT_HOME%\cmd

3
jgrant

頻繁に使用するため、PATH変数からGITのbinフォルダーを削除したくありません(Windowsマシンを使用しています)。だから私は回避策を探しました。そして、ここにあります:

_<git-installation-directory>/usr/bin_ディレクトリもPATH変数に追加します。これは基本的に、「GIT bash」に付属する残りのlinuxのようなコマンドを環境に追加します。これを適用した後、私のメイクファイルは再び正常に実行されました。 :)

Makeによってどのシェルが呼び出されるのか知りたい場合は、makefileの先頭に$(info $(Shell))を追加してください。 makeを実行するとすぐに、呼び出されているシェルのパス/名前がコンソールに出力されます。

2
Ricardo Alejos

PATHからgit binフォルダーを削除しようとしても機能しなかった場合は、bash.exeを含むパスのPATH変数を検索してください。

私の場合、cygwin binフォルダーC:\cygwin64\binにリンクしている変数を見つけて削除し、機能しました。

0