0
我有一個像patsubst與多個通配符
packages/
foo/
lib/
a.js
b.js
bar/
lib/
c.js
d.js
的目錄結構,我想寫一個簡單的Makefile
通過編譯器和輸出編譯packages/foo/lib/a.js
到packages/foo/build/a.js
的結果運行的源文件。在過去,我做過類似
JS = $(shell find packages/foo/lib -name "*.js")
BUILD = $(patsubst packages/foo/lib/%.js, packages/foo/build/%.js, $(JS))
.PHONY: all
all: $(BUILD)
packages/foo/lib/%.js: packages/foo/build/%.js
# Compile $^ and output to [email protected]
這很好用。不過,我現在在做
JS = $(shell find packages/*/lib -name "*.js")
BUILD = $(patsubst ...)
這裏的問題是,patsubst
似乎並不喜歡多%
通配符(即packages/%/lib/%.js
)。但是,如果我使用packages/%.js
,那麼我無法知道在替換中使用哪個目錄。我相信有一個非常簡單的方法可以做到這一點,這是我在make文檔中找不到的。只要你不擔心額外的「LIB」和源「構建」路徑組件
BUILD = $(subst /lib/,/build/,$(JS))
:
太好了!非常感謝。和我的天賦相比,'cp'編譯器看起來真的很快,比如我看上去像'babel'和'traceur';的其他人;) –