我有以下makefile,其中一堆pla
个文件被处理为a
个文件
$(SRC_DIR)
有dec.pla
,inc.pla
以及更多*.pla
个文件
$(FILES)
=所有相应的*.a
个文件而不是dec.a
我有dec0.a
和dec1.a
,因为我想要生成两个不同的文件{{1}根据正在传递的变量,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
我在这里缺少什么?
答案 0 :(得分:1)
$(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=$* < $< > $@