2017-03-02 9 views
1

問題は、furlは変数fileから割り当てられた値を取得しません。 $$fileの代わりにプレーンテキストを使用すると、それは動作します。なぜ私はこれがうまくいかないのか分かりません。Makefile対象:ループから変数を割り当てることができません

のMakefile:これは修正が容易であるべきかなり確信

test: 
    @for file in $(shell pwd)/demo/*; do \ 
     $(eval furl := $(shell echo $$file)) \ 
     echo $(furl); \ 
    done 

イムしかし、私は解決策を見つけることができませんでした。何か案は?

最新のlubuntu OSを使用しています。

答えて

2

ループを実行するシェルにのみ$fileが存在するため、makeに変数が表示されないという問題があります。

どのように修正するかは、実際に何をしたいかによって異なります。

+0

お返事ありがとうございます。私は、ファイル名とファイルディレクトリでさらに操作を行う必要があります。主な仕事は、ファイル名をextを指定しないで抽出して画面に出力することです。ファイル名とディレクトリに基づいて新しいファイルを作成するなどの操作を行う必要があります。理想的には '$ file_name_no_ext'と' $ file_dir'変数を使用します –

+0

最初は単純な '$(furl)= $$ file;'割り当てを試しました。実際には変数に値を代入しますが、 ''/ bin/sh:3:=:not found'を返します。 –

+0

' make'機能なしでこれを行うことができます。 'base = \' basename $$ file \ ''( '$$'と '\\ n'エスケープを避けるために別のシェルスクリプトで行うことをお勧めします)。 –

2

レシピにシェルと変数を混乱させました。私はfurlがシェル変数であるべきだと思います。このようなもの:

test:; @for file in demo/*; do \ 
     furl="`echo $$file`"; \ 
     echo "$$furl"; \ 
     done 

一般的に、レシピにMake変数を割り当てるべきではありません。明らかな例外は$(foreach)です。

関連する問題