如何在Makefile中引入变量

如何在Makefile中引入变量

我在用着重击乌班图GNU Make 4.2.1

我正在尝试编写一个 Makefile,它可以对我拥有的一些数据(.TXT 文件)执行简单的操作。我的不同 .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

所以,一切正常,但显然,当我确定一个目标就足够时,拥有三个目标是不高效的,但我不知道该怎么做。我假设我必须定义一些变量,例如:

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

到你的makefile。

相关内容