Ubuntu
如何在 Makefile 中引入變數
我在Ubuntu和GNU 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”以來,不推薦使用
xargs
with 。find
如果您喜歡長目標名稱的簡寫,您可以添加
count1: /home/data/dir1 count2: /home/data/dir2 count3: /home/data/dir3
到你的makefile。