Makefileに変数を導入する方法

Makefileに変数を導入する方法

私はそれを使用しています吹く存在する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」が導入された後、xargswithの使用は廃止されました。find

長いターゲット名の略語を好む場合は追加できます。

count1: /home/data/dir1

count2: /home/data/dir2

count3: /home/data/dir3

あなたのメイクファイルに。

おすすめ記事