Итак, я пытаюсь написать Makefile для использования с файлами QuestaSim и systemverilog. Если вы не знаете, что это такое (а большинство людей не знают), не волнуйтесь, это не имеет отношения к моей проблеме.
У меня есть директор проекта, содержащий: src/work/Makefile
каталог src/ содержит несколько каталогов, каждый из которых содержит исходные файлы.
каталог work/ изначально не существует и создается make-файлом.
когда я вызываю свой «компилятор», который называется vlog, в файле .sv создается каталог в рабочей папке с тем же именем, что и файл .sv, без суффикса. В этом каталоге есть три файла, один из которых я буду использовать в качестве моего «объектного» файла — _primary.dat.
Так, например, вызов «vlog src/interface/my_interface.sv» создает (в случае успеха) work/my_interface/_primary.dat
Мои файлы .sv также должны быть скомпилированы в определенном порядке, и я хочу скомпилировать их только в том случае, если исходный файл или одна из их зависимостей изменились.
Я могу превратить путь к файлу .sv в путь к соответствующему файлу _primary.dat, используя «$(addsuffix /_primary.dat, $(addprefix $(VLIB_DIR)/, $(basename $(notdir $(SRC)) )))" однако обратное невозможно, так как мы теряем структуру каталогов.
Поэтому я думаю, что мне нужна какая-то карта из объекта -> src. Так что в моей цели $(OBJ): я могу сделать "vlog $(getsrc $@)".
После этого мне нужно разобраться с порядком компиляции и зависимостями, но я, вероятно, смогу это решить.
Какие-либо предложения?
src/interface/foo.sv
, может быть иsrc/engine/foo.sv
? 2) Может лиsrc/
быть глубже двух уровней? То есть может ли бытьsrc/foo/bar/baz.sv
? - person Beta   schedule 22.07.2016vmake
, поставляемую с Questa? - person dave_59   schedule 22.07.2016