我想将以下Makefile从this tutorial应用于更通用的目标。例如,如果我键入make foo
,则我希望以类似于制作foo
的过程从foo.v
和foo.cpp
构建可执行文件maskbus
。
.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: [email protected] obj_dir/V$@__ALL.a g++ -I/usr/share/verilator/include -I obj_dir \ /usr/share/verilator/include/verilated.cpp \ [email protected] 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
。
我想将本教程中的以下Makefile用于更通用的目标。例如,如果我输入make foo,那么我期望在...