我想創建一個使用monorepo的Makefile,並且正在基於源文件目錄的動態輸出目錄掙扎。基於源文件目錄的動態輸出目錄的Makefile
我的項目被佈置像這樣:
% tree .
.
├── Makefile
└── packages
├── bar
│ └── src
│ └── index.js
│ └── other-file.js
└── foo
└── src
└── index.js
5 directories, 4 files
欲處理每個*.js
文件每個包的內部(例如,./packages/foo/src/index.js
),併發射輸出到另一個目錄(具體地,./packages/foo/lib/index.js
)。
例如make bar
將:
- 過程
./packages/bar/src/index.js
- >./packages/bar/lib/index.js
- 過程
./packages/bar/src/other-file.js
- >./packages/bar/lib/other-file.js
我也將潛在地喜歡用這種模式用於在./src
其他類型的文件的如處理.less
文件。
的Makefile:
PACKAGES_ROOT = ./packages
packages := $(shell ls $(PACKAGES_ROOT))
package_source_dir := $(addprefix packages/,$(addsuffix /src/,$(packages)))
package_dest_dir := $(subst src,lib,$(package_source_dir))
package_source := $(foreach sdir, $(package_source_dir), $(wildcard $(sdir)*.js*))
package_dest := $(subst src,lib,$(package_source))
.PHONY: all checkdirs clean
all: checkdirs
checkdirs: $(package_dest_dir)
$(package_dest_dir):
mkdir -p [email protected]
$(packages):
@echo "[email protected]"
clean:
rm -rf $(package_dest_dir)
我不知道我是否需要使用VPATH
還是什麼...幫助嗎?
注意:Makefile
目前只是足以製作和刪除所有目標目錄。
雖然你的問題並不完全是[this one]的重複(http://stackoverflow.com/questions/39015453/building-c-program-out-of-source-tree-with-gnu-make/39033569 #39033569),你可以在這裏找到幾種不同的方法來實現你想要做的事情。花時間閱讀並理解答案。 – Tim
謝謝你指點我正確的方向。我實際上已經嘗試過動態規則生成,但是我的'define'永遠不會被調用。再給它一次,並更新我的問題(並希望回答)。 –