[英]How do I expend this Makefile to use wildcards?
我想將本教程中的以下 Makefile 用於更通用的目標。 例如,如果我輸入make foo
,那么我希望在類似於制作maskbus
的過程中從foo.v
和foo.cpp
構建一個可執行文件foo
。
.PHONY: all
all: maskbus
obj_dir/Vmaskbus.cpp: maskbus.v
verilator -Wall -cc maskbus.v
obj_dir/Vmaskbus__ALL.a: obj_dir/Vmaskbus.cpp
make -C obj_dir -f Vmaskbus.mk
maskbus: maskbus.cpp obj_dir/Vmaskbus__ALL.a
g++ -I/usr/share/verilator/include -I obj_dir \
/usr/share/verilator/include/verilated.cpp \
maskbus.cpp obj_dir/Vmaskbus__ALL.a \
-o maskbus
.PHONY: clean
clean:
rm -rf obj_dir/ maskbus
這是我嘗試過的
.PHONY: all
stuff: $(basename $(wildcard *.v))
all: stuff
obj_dir/%.cpp: %.v
verilator -Wall -cc $<
obj_dir/V%__ALL.a: obj_dir/V%.cpp
make -C obj_dir -f Vmaskbus.mk
stuff: $@.cpp obj_dir/V$@__ALL.a
g++ -I/usr/share/verilator/include -I obj_dir \
/usr/share/verilator/include/verilated.cpp \
$@.cpp obj_dir/V$@__ALL.a \
-o $@
.PHONY: clean
clean:
rm -rf obj_dir/ $(stuff)
請注意,我在第二條規則中保留了名稱Vmaskbus
不變,因為我不知道如何從包含%
的規則中提取正確的“基本名稱”。 但是,當我運行make foo
,該規則甚至沒有執行,因此后續命令由於缺少obj_dir/Vfoo__ALL.a
。 一些調查表明變量stuff
是空的,但我確定當前目錄中有foo.v
和foo.cpp
。
自己想出來的:
.PHONY: all clean
stuff := $(basename $(wildcard *.v))
all: $(stuff)
obj_dir/V%.cpp: %.v
verilator -Wall -cc $<
obj_dir/V%__ALL.a: obj_dir/V%.cpp
make -C obj_dir -f V$*.mk
$(stuff): %: %.cpp obj_dir/V%__ALL.a
g++ -I /opt/local/share/verilator/include \
-I obj_dir \
-o $@ \
/opt/local/share/verilator/include/verilated.cpp \
obj_dir/V$*__ALL.a \
$*.cpp
clean:
rm -rf obj_dir/ $(stuff)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.