今、私はmakefileの使い方を学んでおり、ルール内の変数に問題があります。私の目標は、他のファイルの名前を含むファイルを解析し、それを変数に保存し、その変数を「ターゲットパターン」として使用して各ファイルに対してルールを実行することです。ここに私の問題の簡単な例があります(私はそれを簡単にするためにファイル名を書いています)。ルール外のmakefile変数の使い方
私は実行すると、この:
variable = file1.txt file2.txt file3.txt
run : $(variable)
$(variable): %.txt:
echo File is [email protected]
私は私が欲しいものであるとして、次を得る:
$ make run
echo File is file1.txt
File is file1.txt
echo File is file2.txt
File is file2.txt
echo File is file3.txt
File is file3.txt
問題、私はファイルを解析してvariable
を定義したい、と私はしたいですそのファイルが存在しない場合は、makefile内の別のルールを使用して作成するため、そのファイルは依存関係になります。私は(私は私の反響からあります知っている)、このようなルールで変数を定義するときに:
$ make target1
echo file1.txt file2.txt file3.txt
file1.txt file2.txt file3.txt
そして、この:
$ make run
make: Nothing to be done for `run'.
target1 :
$(eval variable = file1.txt file2.txt file3.txt)
echo $(variable)
run : $(variable)
$(variable): %.txt:
echo File is [email protected]
私は次の取得します
私の質問はどのようにルール内の変数を定義し、これを何かの行に使用することです:
$(variable): %.txt:
echo File is [email protected]
私はマニュアルとグーグルで読んでみましたが、これを理解できません。私はまた、私は行方不明の簡単な答えがいくつかあると思います。あなたの助けをありがとう! :)
makeの仕組みのためにうまくいきません:FIRST makeは、必要に応じて、全メイクファイルを解析し、変数を展開します。その後、makeは古いルールのレシピを実行し始めます。したがって、makeが 'eval'を含む' target1'のレシピを実行するまでに、残りのmakefileはすでに解析されており、 'variable'はすでに(空の文字列に)展開されています。 – MadScientist