私はそれを使用しています吹く存在するUbuntuそしてGNUメイク4.2.1。
私が持っているいくつかのデータ(.TXTファイル)に対して簡単なタスクを実行できるMakefileを作成しようとしています。私の他の.TXTファイルは3つのディレクトリdata/dir1、data/dir2、data/dir3に保存されています。
たとえば、make count_dir1、make count_dir2、または make count_dir3 と入力して、ディレクトリの総行数を取得できるようにします。
Makefileを使用せずに、現在のディレクトリがdata / dir1のときにこれを行う方法を知っています。
find . -name '*.TXT*' -type f | xargs wc -l
私は各ファイルの行数と合計を取得します。これが私が望むものです。
現時点では、私の目標は基本的に次のとおりです。
count_dir1: /home/data/dir1
@cd /home/data/dir1 &&\
find . -name '*.TXT*' -type f | xargs wc -l
count_dir2: /home/data/dir2
@cd /home/data/dir2 &&\
find . -name '*.TXT*' -type f | xargs wc -l
count_dir3: /home/data/dir3
@cd /home/data/dir3 &&\
find . -name '*.TXT*' -type f | xargs wc -l
それで、すべてがうまくいきますが、1つの目標で十分であると判断した場合、3つの目標を持つことは明らかに効率的ではありませんが、どうすればよいかわかりません。次のようないくつかの変数を定義する必要があるとします。
dirs = /home/data/dir1 /home/data/dir2 /home/data/dir3
しかし、目標をどのように達成するのかわかりませんが、私が読んだところでは、このように変数を導入するのは良い選択ではないと思います。
よろしくお願いします! :)
答え1
gmakeが標準に十分準拠している場合は、次のものを使用できます。
DIRS= /home/data/dir1 /home/data/dir2 /home/data/dir3
.PHONY: $(DIRS)
all: $(DIRS)
$(DIRS):
cd $@ && find . -name '*.TXT*' -type f -exec wc -l {} +
.PHONY:
ディレクトリが存在し、他のターゲットに依存していないために必要です。
1988年に「execplus」が導入された後、xargs
withの使用は廃止されました。find
長いターゲット名の略語を好む場合は追加できます。
count1: /home/data/dir1
count2: /home/data/dir2
count3: /home/data/dir3
あなたのメイクファイルに。