仅在文件存在时才生成目标

时间:2013-08-02 15:01:25

标签: bash unix makefile

在我的makefile中,我想做这样的事情:

all: foo bar python

python:
    if /usr/bin/someprogram
        do some stuff
    else
        echo "not doing some stuff, coz someprogram ain't there"
    endif

实现这一目标的最简单方法是什么?

2 个答案:

答案 0 :(得分:5)

一种简单的方法是使用test

python:
    @test -s /usr/bin/someprogram && echo "someprogram exists" || echo "someprogram does not exist"
    @test -s /bin/ls && echo "ls exists" || echo "ls does not exist"

正如@MadScientist所说,如果你想做多件事,你可能需要一个if语句:

python:
        if [ -s /bin/ls ]; then \
          echo "ls exists"; \
        fi;

答案 1 :(得分:2)

您可以使用'if'和'shell'make函数:

all: foo bar python

CMD=/some/missing/command

foo:
    echo "foo"

bar:
    echo "bar"

python:
    $(if $(shell $(CMD) 2>/dev/null), \
    echo "yes", \
    echo "no")

这回声'不'。如果将CMD更改为/ bin / ls,则回显“是”。