Javaコードをコンパイルしています。ファイル名にドル記号がある場所で.classファイルを作成することがよくあります。 GNU makeはこれを嫌うようで、ファイル名に干渉し続けます。GNU makeがドル記号を含むファイル名に干渉しないようにするにはどうすればよいですか?
単純な(工夫した)例として、MyFolderディレクトリ(およびサブフォルダ)内のすべての.classファイルに対してhexdumpを実行するGNU Makefileタスクを作成したいとします。
今はMyFolderは、以下のファイルがあるとします。
MyFolder/makefile MyFolder/sample.java MyFolder/subdir/abc$1.class MyFolder/subdir/test.java MyFolder/xyz.class
目標はhexdumpに対してを実行しているレシピを書くことで、MyFolderという(およびそのサブフォルダ)内のすべての.classファイルを渡します。だから、ファイルの上記のリストについては、GNUは、実行する必要が作るであろうと、最終的なコマンド:
hexdump subdir/abc$1.class xyz.class
これは、ログから落ちるように簡単なはずですが、GNUのmakeはこれを作るために、極端な痛みに行っているようですできるだけ難しい。次のMakefileを持つ素朴な試みが動作しません:
default: hexdump $(shell find -name '*.class')
あなたはこのMakefileを実行すると、次のエラーを取得:どのように上記の出力の最初の行では、コマンド
hexdump ./subdir/abc$1.class ./xyz.class hexdump: ./subdir/abc.class: No such file or directory make: *** [makefile:3: default] Error 1
お知らせ正しいです(ファイル名にはドル記号文字が含まれています)。しかし実際に実行されるコマンドは実行され、 "$ 1"は評価されています。
実際、ドル記号を二重ドル記号で正しくエスケープすると、次のMakefileでさえ失敗します。もちろん、私がいないハードコードのファイル名をしてレシピを書きたいが、ファイルは
default: hexdump subdir/abc$$1.class xyz.class
がさえ、上記のMakefileが同じで失敗コマンド(...シェルが見つける。)$で発見されなければなりません最初のMakefileとしてのエラー。
ドル記号を含むファイル名にGNU makeが干渉しないようにするにはどうすればよいですか? Javaコンパイラはこれらのことを常に作成していますので、誰かがこれまでに実行していたに違いないでしょうか?
私たちの状況のための最良の解決策は、シェル内で$$を使用してリストを作成することでした( )構文です。説明ありがとう。 – deltamind106