を作りますしかし、セパレータとしてセミコロンを使用しています:参加要素が、私はこのように、ディレクトリのリストで変数を持っている私のmakefileで
PATH = /usr:/usr/share/:/lib
はどのように私はそれを行うのですか?つまり、スペースの代わりにセミコロンでDIRSリストの要素を結合するにはどうすればいいですか?
エリックMelski
を作りますしかし、セパレータとしてセミコロンを使用しています:参加要素が、私はこのように、ディレクトリのリストで変数を持っている私のmakefileで
PATH = /usr:/usr/share/:/lib
はどのように私はそれを行うのですか?つまり、スペースの代わりにセミコロンでDIRSリストの要素を結合するにはどうすればいいですか?
エリックMelski
あなたは、単一のスペースの値を持つ変数を取得するためにちょっとしたトリックと組み合わせ$(subst)
コマンドを使用することができますきれいなフォーム(私は見つけることができること):
classpathify = $(subst $(eval) ,:,$(wildcard $1))
cp = a b c d/*.jar
target:
echo $(call classpathify,$(cp))
# prints a:b:c:d/1.jar:d/2.jar
注:
うわー、魅力のように、多くの感謝の作品!数時間それを苦労している! –
そこには '$(noop)'の代わりに '$(eval)'を使うこともできるので、noopを定義する必要はありません。 –
+1そのような黒い魔法を見つける。 –
に、
p = /usr /usr/share /lib
noop=
space = $(noop) $(noop)
all:
@echo $(subst $(space),:,$(p))
希望に役立ちます:
私が追加したいこと:Javaが "-cp lib/*"構文をサポートするようになったので、$(ワイルドカード$ 1)を避けることができます。これは、JavaプロジェクトがJARの1トンは、特定のプラットフォームで長さ制限を超えるケースにつながる可能性があります。 –
より一般的な形式: joinwith = $(subst $(eval)、$ 1、$ 2) $(joinwith、-o、$(list_of_files_separated_by_spaces)) –
+1私はまったく同じ質問をしています。これは簡単だと思います。 –