我有一个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.ml
,footest.ml
,footest.native
但是,我只能获得foo.ml
。剩下的两个我只得到.ml
和.native
我该如何解决这个问题?
答案 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
。