許可拒否エラーの解決: Makefile と直接 Go 実行の間の不一致について
Makefile から Go スクリプトを実行しようとすると、次のような問題が発生する可能性があります。予期しない「アクセス許可が拒否されました」エラーが発生します。これは、特に問題なくスクリプトを直接実行できる場合には、困惑する可能性があります。
犯人: PATH 上の 'go' という名前のディレクトリ
明らかな矛盾GNU make のバグが原因で発生します。具体的には、PATH 上の任意のディレクトリに「go」という名前のディレクトリがある場合に問題が発生します。このディレクトリにはサブディレクトリを含めるべきではありませんが、サブディレクトリが存在すると、Go 実行可能ファイルではなくディレクトリ自体が呼び出される可能性があります。
これがエラーの原因であるかどうかを確認するには、PATH を調べて、次の名前のディレクトリを見つけます。サブディレクトリを含む「go」。たとえば、/usr/bin/go/ などのディレクトリ パスが PATH 上にある場合、問題が発生する可能性があります。
問題の解決: ディレクトリの削除または名前変更
最も簡単な解決策は、PATH から「go」ディレクトリを削除することです。あるいは、ディレクトリの名前を「go」以外の名前に変更することもできます。それに応じて PATH を変更すると、アクセス許可拒否エラーが発生することなく、Makefile から Go スクリプトを実行できるようになります。
シェルを使用して GNU Make に実行可能ファイルを強制的に呼び出す
「go」ディレクトリの削除または名前変更が不可能な場合は、Go 実行可能ファイルを実行する前に GNU make がシェルを呼び出すようにすることで問題を解決できます。これを実現するには、セミコロン ';' などの特殊文字を Makefile ターゲットの末尾に追加するだけです:
run: go run . ;
この回避策は、最初にシェルを呼び出すように GNU make に指示し、その後シェルが実行されます。 Go スクリプト。
「run」ターゲットと「run2」ターゲットの違いを理解する
提供された例では、「run」ターゲットは「 go run 」を直接呼び出します。 」特殊文字なしで。 PATH 上に「go」ディレクトリがある可能性が高いため、GNU make はディレクトリ自体を実行しようとします。その結果、権限拒否エラーが発生します。
一方、「run2」ターゲットは echo コマンドを使用して、 Go スクリプトを実行する前に文字列を出力します。この追加コマンドにより、GNU make がシェルを呼び出すようになり、エラーが解決されます。
以上がMakefile の許可拒否エラー: Go スクリプトと直接実行の間の不一致を解決するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。