我如何使用此Makefile来使用通配符?

问题描述 投票:0回答:1

我想将以下Makefile从this tutorial应用于更通用的目标。例如,如果我键入make foo,则我希望以类似于制作foo的过程从foo.vfoo.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.vfoo.cpp

我想将本教程中的以下Makefile用于更通用的目标。例如,如果我输入make foo,那么我期望在...

c++ makefile build verilog wildcard
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.