2017-10-27 7 views
0

現在のフォルダー内のディレクトリーをパスのリストの先頭に入れるようにMakefileを取得しようとしています。これに似て何か:Makefile addprefixはドットを削除します

FILES = path/to/first path/to/second path/to/third 

PREPENDED_FILES = $(addprefix ./localdir/, $(FILES)) 

all: $(PREPENDED_FILES) 
    echo $^ 

理想的make allの出力は次のようになります。

./localdir/path/to/first ./localdir/path/to/second ./localdir/path/to/third 

しかし、私には不明初期.がそのように取り除かれます理由のために私が手:

/localdir/path/to/first /localdir/path/to/second /localdir/path/to/third 

のために私の残念なことに絶対パスを使用することはできませんので、を$(PWD)の代わりに使用することはできません。出力に先頭の.が必要です。他の機能(例:warning)にラップすると、.が再び表示されます...

ご意見がありましたら、お気軽にお問い合わせください。

+0

が印刷されます、あなたは*出力*で、または*前提条件に「./」をリードする必要がありますか*? – Beta

+0

この動作を再現できません(GNU Make 4.2.1)。注意(あなたの問題とは関係ない): 'addprefix'のようなmake関数呼び出しでは無駄なスペースを避けるべきです。 –

+1

ところで、完全な階層のルートにあなたの例の 'localdir'がありますか?そして、あなたは 'make' form '/'を呼び出しますか? '。/ localdir'と'/localdir'が同じで、 'make'が何らかの形で*前提条件のパスを正規化するので、あなたが観察するものは普通です。 –

答えて

0

あなたは接頭辞を引用してドットを維持することができます

PREPENDED_FILES = $(addprefix "./localdir/", $(FILES)) 

これは

./localdir/path/to/first ./localdir/path/to/second ./localdir/path/to/third 
+0

残念なことに、実行している出力は 'make:***ターゲットを作成するルールがありません '" ./localdir/"path/to/first'、 'foo'が必要です。それは引用符が保存されているようだ。 –

+0

どちらの 'make 'を使用していますか?あなたは 'グヌマケ'を試しましたか? – clemens

+0

GNU Make 3.81を使用しています。もう少し掘り下げてみると、問題は '$(PREPENDED_FILES)'を前提条件として追加したことによると思われます。 'all'の本文を 'echo $(PREPENDED_FILES)'に変更し、それを前提条件として省略した場合、先頭のドットで期待される出力が得られます。私は、変数が前提条件としてどのように扱われるかについての知識のギャップが必要です... –

関連する問題