Makefile(erlang.mk)找不到已存在的文件

t1rydlwq  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(165)

我正在尝试构建一个项目,该项目的Makefile导入了一个erlang.mk,该网站导入了其他Makefile和erlang. mks。
在一个www.example.com中erlang.mk我在菜谱的条件中有一个grep调用,如下所示

if grep ^$$dep$$ $(ERLANG_MK_TMP)/deps.log; then \

这就是打印

grep: /home/forrealthough/code/rabbitmq-consistent-hash/.erlang.mk/deps.log: No such file or directory

返回代码为2。如果我把这一行放在

if [ ! -f $$ERLANG_MK_TMP/deps.log ]; then echo "File not found!"; fi;\

我得到“文件未找到!"。
该文件确实存在,我可以cat它从相同的目录,并运行相同的if行没有得到一个“文件找不到!"。它的权限是-rw-rw-r--,我得到相同的错误运行make有或没有sudo
为什么我的脚本找不到此文件?
编辑:我被要求修改我的if测试,所以下面是我的脚本的相关部分(这在一个食谱中):

echo file: $(ERLANG_MK_TMP)/deps.log;\
if [ ! -f $(ERLANG_MK_TMP)/deps.log ]; then echo "File not found!"; fi;\
if grep ^$$dep$$ $(ERLANG_MK_TMP)/deps.log; then \

然后打印

file: /home/forrealthough/rabbitmq-consistent-hash/.erlang.mk/deps.log
File not found!
grep: /home/forrealthough/rabbitmq-consistent-hash/.erlang.mk/deps.log: No such file or directory
make: *** [erlang.mk:4322: deps] Error 2

同样,文件确实存在。grep返回status code=2,我检查了它回显$$?,它运行条件的else部分。
编辑2:如果我把一个ls $(ERLANG_MK_TMP);\和其他测试放在一起,它会列出该目录中的每个文件,除了deps.log,它也在那里。这适合我做的其他测试,我试图从这个脚本访问不同的文件,deps.log是唯一找不到的文件。
我在同一个项目中有一个相同的脚本,作为另一个项目的模块构建(另一个Makefile导入另一个erlang.mk,试图构建我正在处理的项目的Makefile)。在那里,脚本可以找到有问题的文件,并且它正常运行。

gupuwyp2

gupuwyp21#

$(ERLANG_MK_TMP)是一个make变量。$$ERLANG_MK_TMP是一个(转义的)shell变量。后者只有在导出前者时才有值,如果你只是在makefile中赋一个make变量而不导出它,它就没有任何值。
为什么在这里使用两种不同的格式?为什么不用途:

if [ ! -f $(ERLANG_MK_TMP)/deps.log ]; then ...

相关问题