-
Makefile
Допустим, есть «глупая» команда foo, вызываемая
[code]foo bar.src[/code]
без каких-либо других параметров. Она создает файл в foo.bin текущей директории. Структура файлов следующая:
[CODE]src/
src/bar.src
bin/
makefile[/CODE]
foo вызывается из makefile. Нужно, чтобы make поместил bar.bin в каталог bin/.
Как сделать? :)
-
[CODE]
bin/bar.bin[B]:[/B] src/bar.src
[B]foo[/B] src/bar.src
[B]mv[/B] bar.bin bin[/CODE]
-
[b]Яр[/b]
Неужели так просто? :) Спасибо.
Некая команда foo — это ghdl (грубо говоря gcc для vhdl). Проблема в том, что она создает файл со списком vhdl-файлов с таймстампами, который должен лежать вместе с объектными файлами. Так что если просто переместить объектные файлы без ведома ghdl, он их не находит при линковке. К счастью, оказалось, ghdl не «глупа» как foo, и у нее есть параметр указания workdir, куда она складывает объектные файлы. А исполнительный файл и и vcd-файл приходится перемещать вручную.
Не знаю, кому может понадобится, но на всякий случай — makefile для анализа, синтеза, исполнения vhdl-проекта и отображения результата симуляции (посредством gtkwave).
[CODE]BIN_DIR = bin
SRC_DIR = src
VPATH = $(SRC_DIR):$(BIN_DIR)
SOURCES=cbr.vhd cm.vhd mux.vhd cu.vhd tb.vhd
TOP_UNIT = tb
SIM_TIME = 4400ns
VCD_FILE = $(TOP_UNIT).vcd
EXE_FILE = $(BIN_DIR)/$(TOP_UNIT)
OBJECTS = $(SOURCES:.vhd=.o)
$(BIN_DIR)/$(VCD_FILE):$(EXE_FILE)
$(BIN_DIR)/$(TOP_UNIT) --stop-time=$(SIM_TIME) --vcd=$(VCD_FILE)
mv $(VCD_FILE) $(BIN_DIR)
$(EXE_FILE):$(OBJECTS)
ghdl -e --workdir=$(BIN_DIR) $(TOP_UNIT)
mv $(TOP_UNIT) $(EXE_FILE)
%.o:%.vhd
ghdl -a --workdir=$(BIN_DIR) $^
sim:
gtkwave $(BIN_DIR)/$(VCD_FILE)
clean:
rm -f $(BIN_DIR)/*.o $(EXE_FILE) $(BIN_DIR)/$(VCD_FILE) $(BIN_DIR)/*.cf[/CODE]