如何处理make中的特殊情况?

时间:2018-05-10 01:33:44

标签: linux perl makefile gnu-make

我有以下makefile,其中一堆pla个文件被处理为a个文件

$(SRC_DIR)dec.plainc.pla以及更多*.pla个文件

$(FILES) =所有相应的*.a个文件而不是dec.a我有dec0.adec1.a,因为我想要生成两个不同的文件{{1}根据正在传递的变量,dec0.adec1.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 :(得分:1)

$(FILES): $(TMP_DIR)/dec0.a: $(SRC_DIR)/dec.plastatic 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=$* < $< > $@