从make文件运行bash脚本

时间:2010-03-23 04:57:53

标签: bash makefile

我有一个makefile,我想从中调用另一个外部bash脚本来执行构建的另一部分。我最好怎么做呢。

4 个答案:

答案 0 :(得分:31)

就像从makefile中调用任何其他命令一样:

target: prerequisites
    shell_script arg1 arg2 arg3

关于你的进一步解释:

.PHONY: do_script

do_script: 
    shell_script arg1 arg2 arg3

prerequisites: do_script

target: prerequisites 

答案 1 :(得分:7)

makefile规则中的每个操作都是一个将在子shell中执行的命令。您需要确保每个命令都是独立的,因为每个命令都将在一个单独的子shell中运行。

因此,当作者想要在同一子shell中运行多个命令时,您经常会看到换行符被转义:

targetfoo:
        command_the_first foo bar baz
        command_the_second wibble wobble warble
        command_the_third which is rather too long \
            to fit on a single line so \
            intervening line breaks are escaped
        command_the_fourth spam eggs beans

答案 2 :(得分:4)

也许不是"对"这样做的方式就像已经提供的答案一样,但我遇到了这个问题,因为我希望我的makefile运行我编写的脚本来生成一个头文件,该头文件将提供整个软件包的版本。我在这个软件包中有很多目标,并不想为它们添加一个全新的先决条件。把它放在我的makefile的开头为我工作

$(shell ./genVer.sh)

告诉make简单地运行shell命令。 ./genVer.sh是路径(与makefile相同的目录)和要运行的脚本的名称。无论我指定哪个目标(包括clean,这都是缺点,但最终对我来说不是一件大事),这都会运行。

答案 3 :(得分:2)

目前使用 Makefile,我可以很容易地像这样调用 bash 脚本:

dump:
    ./script_dump.sh

并调用:

make dump

这也像其他答案中提到的那样工作:

dump:
    $(shell ./script_dump.sh)

但缺点是您无法从控制台获取 shell 命令,除非您将其存储在变量中并 echo