我有下面的makefile,其中一堆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
我错过了什么?
最佳答案
$(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=$* < $< > $@