Ubuntu

如何在 Makefile 中引入變數

  • August 21, 2020

我在UbuntuGNU Make 4.2.1上使用****Bash

我正在嘗試編寫一個對我擁有的某些數據(.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

所以,一切正常,但很明顯,當我確定一個目標就足夠時,擁有三個目標並不高效,但我不知道該怎麼做。我假設我必須定義一些變數,例如:

dirs = /home/data/dir1 /home/data/dir2 /home/data/dir3

但是我不確定如何實現我的目標,從我讀過的內容來看,我覺得以這種方式引入變數不是一個很好的選擇。

先感謝您 !:)

如果 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。

引用自:https://unix.stackexchange.com/questions/605569