簡體   English   中英

我如何使用這個 Makefile 來使用通配符?

[英]How do I expend this Makefile to use wildcards?

我想將本教程中的以下 Makefile 用於更通用的目標。 例如,如果我輸入make foo ,那么我希望在類似於制作maskbus的過程中從foo.vfoo.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.vfoo.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM