2017-07-01 3 views
0

私のプロジェクトのディレクトリ構造は次のとおりです。Makefileにパスを持つディレクトリコンテンツの非再帰的なリストを取得するには?次のように

enter image description here

私のMakefileは次のようになります。

dir1_contents = $(shell ls dir1/*) 
dir3_contents = $(shell ls dir3/*) 

all: clean_dir1 clean_dir3 

clean_dir1: 
    echo 'dir1_contents = $(dir1_contents)' 

clean_dir3: 
    echo 'dir3_contents = $(dir3_contents)' 

私はmakeを実行すると、これは私が得るものです:

$ pwd 
make-test 

$ make -s 
dir1_contents = dir1/file2.junk dir1/dir2: file1.junk 
dir3_contents = dir3/file3.junk 

私はdir1の内容をdir1_contentsに入れたいと思っています。しかし、私は再帰的な内容を望んでいません。 dir1ディレクトリのすぐ下にあるコンテンツだけです。どうしたらいいですか?

メイクファイルの最初の2行から/*を削除すると、私は必要な正しい内容を得ることができます。

$ pwd 
make-test 

$ make -s 
dir1_contents = dir2 file2.junk 
dir3_contents = file3.junk 

がどのように私はまた、必要なファイルパスを私がしたい右の内容を取得することができます。しかし、その後、彼らは私も必要なそのパスが不足していますか?

+0

'dir1_contents = DIR1/$(シェルのls DIR1)' – igagis

+0

igagis、うまくいかなかったことします。https:/ /gist.github.com/saqib-zmi/0a245d7af4451e91e064ef949ed322f4 –

+1

その解決策は、 'dir1_contents = $(addprefix dir1 /、$(shell ls dir1))'と修正することができます。 – Beta

答えて

2

あなたが持っている問題は、lsの動作に関連しています。それはGNU makeとは関係ありません。あなたがls dir1/*を実行すると、シェルがlsを呼び出す前に、ワイルドカードを展開するので、これを実行するのと同じである、その後:

ls dir1/dir2 dir1/file2.junk 

そして、あなたlsディレクトリは、デフォルトでは、ディレクトリの内容を示し、その出力は次のようになります。

$ ls dir1/dir2 dir1/file2.junk 
dir1/file2.junk 

dir1/dir2: 
file1.junk 

(これをコマンドプロンプトで試してみてください)。それがシェルの印刷物なので、それはあなたが返す結果です。

あなただけのディレクトリ内のファイルのディレクトリを確認したいが、そうでない場合、あなたはlsコマンドに-dオプションを追加することができます。メイクファイルで

$ ls -d dir1/dir2 dir1/file2.junk 
dir1/file2.junk dir1/dir2 

または、:

dir1_contents = $(shell ls -d dir1/*) 
dir3_contents = $(shell ls -d dir3/*) 

しかし、これはとにかくこれを行うには良い方法ではないと思います。代わりにGNU makeの組み込み関数wildcardを使わないのはなぜですか?より理解しやすいことに加えて、移植性が高く、より効率的です(上記のバージョンでは、シェルとlsプログラムを呼び出す必要があります)。私はまた、あなたが唯一のワイルドカード操作を一度実行するようにしますが、ない=:=を使用することをお勧め:

dir1_contents := $(wildcard dir1/*) 
dir3_contents := $(wildcard dir3/*) 
+0

ありがとうございました!はい! –

+0

フォローアップの質問はこちら:https://stackoverflow.com/questions/44877381/how-to-exclude-a-particular-file-with-gnumakes-wildcard-function –

関連する問題