Как обращаться с особыми случаями в make? - PullRequest
0 голосов
/ 10 мая 2018

У меня есть следующий make-файл, в котором куча pla файлов обрабатывается в a файлах

$(SRC_DIR) имеет dec.pla, inc.pla и многие другие *.pla файлы

$(FILES) = все соответствующие *.a файлы, и вместо dec.a у меня есть dec0.a и dec1.a, поскольку я хочу создать два разных файла dec0.a и dec1.a, соответствующих dec.pla на основе переменная, которая передается. Как мне это сделать?

$(FILES):$(TMP_DIR)/%.a      : $(SRC_DIR)/%.pla                
        $(BASE_CMD)        < $< > $@

$(FILES):$(TMP_DIR)/dec0.a   : $(SRC_DIR)/dec.pla
        $(BASE_CMD) -D c=0 < $< > $(TMP_DIR)/dec0.a

$(FILES):$(TMP_DIR)/dec1.a   : $(SRC_DIR)/dec.pla
        $(BASE_CMD) -D c=1 < $< > $(TMP_DIR)/dec1.a

Я попробовал выше и получил ошибку

proc.make:8: *** target pattern contains no '%'.  Stop

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 10 мая 2018

$(FILES): $(TMP_DIR)/dec0.a: $(SRC_DIR)/dec.pla - это правило статического шаблона ... без шаблона. Это недопустимый синтаксис make.

Вы можете попробовать:

FILES1 := $(patsubst $(SRC_DIR)/%.pla,$(TMP_DIR)/%.a,$(wildcard $(SRC_DIR)/*.pla))
FILES2 := $(TMP_DIR)/dec0.a $(TMP_DIR)/dec1.a

$(FILES1): $(TMP_DIR)/%.a: $(SRC_DIR)/%.pla                
        $(BASE_CMD) < $< > $@

$(FILES2): $(TMP_DIR)/dec%.a: $(SRC_DIR)/dec.pla
        $(BASE_CMD) -D c=$* < $< > $@
...