Makefile:读取输入变量并设置几个变量

时间:2016-02-08 03:01:21

标签: makefile

我有一个makefile,我想从输入中读取文件名,然后根据它的名称制作其他名称。我试过以下代码

mlext = .ml
testext = test.ml
nativeext = test.native

test: 
    @read -p "Enter file name: " file; \
    echo $$file$(mlext); \
    echo $$file$(testext); \
    echo $$file$(nativeext)

例如:

如果我输入:foo

然后我想获得foo.mlfootest.mlfootest.native

但是,我只能获得foo.ml。剩下的两个我只得到.ml.native

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

首先,让我们通过删除Makefile中的read -p "Enter file name: " file; \ echo $file.ml; \ echo $filetest.ml; \ echo $filetest.native; 来看看给shell的确切配方是什么:

$(testext)

因此问题是$$file的内容被附加到$filetest,创建了shell变量$(mlext),它很可能不存在,从而产生一个空字符串结束。 $${file}不会发生这种情况,因为初始点不能是变量名称的一部分。

要解决此问题,请在Makefile规则中使用$$file代替dm_document