1

我正在制作一个makefile,我正在处理一个没有依赖关系的目标,它检查当前目录中是否存在名为README的文件,如果存在,请使用less读取它,否则完全退出:不给出任何错误- - 如果是这种情况,运行目标的命令不应向控制台打印任何内容。

我尝试了几种不同的方法,但似乎没有任何效果(PAGER 只是一个等于 less 的 var):

read :
   ifneq ("$(wildcard README)","")
      -@$(PAGER) README
   endif

还有这个代码

read :
   -@for file in *;\
   do \
       if [ ${file} == "README" ]; then\
           $(PAGER) "README" ;\
       fi;\
   done

在第一个块中,我不断收到类似于 /bin/sh 的错误:语法错误:单词意外(期望“)”)并且对于我的生活,我只是不明白它在说什么。我当然不认为有语法错误,也许我在滥用make。

对于后一个代码,我得到一个意外的 == 运算符错误。

我也尝试过像这两个单班轮解决方案这样更简单的事情,但得到了类似的错误:

-@test -a README && less README
-@[ -a README ] && less README

任何帮助将不胜感激。

编辑:我进一步挖掘,看到了一些有希望的东西,并明确地将我的 shell 设置为 /bin/bash (SHELL := /bin/bash) 但没有骰子。

4

2 回答 2

1

您应该尝试将 shell 代码提取到单独的 *.sh 文件中,以便可以将它们指定为 makefile 中的命令(并确保 *.sh 文件是可执行的)。

于 2012-04-20T06:14:37.930 回答
1
read:
        @if [ -e README ]; then less README; fi
于 2012-04-20T06:23:18.917 回答