我有下面的makefile,其中一堆pla文件被处理为a文件
$(SRC_DIR)dec.plainc.pla和更多的*.pla文件
$(FILES)=所有对应的*.a文件,而不是dec.a我有dec0.adec1.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

我错过了什么?

最佳答案

$(FILES): $(TMP_DIR)/dec0.a: $(SRC_DIR)/dec.pla是一个static pattern rule。。。没有图案。这不是有效的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=$* < $< > $@

10-05 20:01