从make文件运行bash脚本

Mat*_* FL 35 bash makefile

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

Car*_*rum 37

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

target: prerequisites
    shell_script arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

关于你的进一步解释:

.PHONY: do_script

do_script: 
    shell_script arg1 arg2 arg3

prerequisites: do_script

target: prerequisites 
Run Code Online (Sandbox Code Playgroud)

  • @Matthew,然后你的makefile设置不正确.创建一个新的`.PHONY`目标,您的先决条件依赖于该目标,并在该目标中运行脚本. (2认同)

Bro*_*her 13

目前使用 Makefile,我可以轻松地调用 bash 脚本,如下所示:

dump:
    ./script_dump.sh
Run Code Online (Sandbox Code Playgroud)

并致电:

make dump
Run Code Online (Sandbox Code Playgroud)

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

dump:
    $(shell ./script_dump.sh)
Run Code Online (Sandbox Code Playgroud)

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


big*_*ose 10

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
Run Code Online (Sandbox Code Playgroud)


yan*_*ano 5

也许不是像已经提供的答案那样“正确”的方法,但是我遇到了这个问题,因为我希望我的makefile运行我编写的脚本来生成一个头文件,该头文件将提供整个软件包的版本。我在此软件包中有很多目标,并且不想为所有目标添加全新的前提条件。把这个放在我的makefile的开头对我有用

$(shell ./genVer.sh)
Run Code Online (Sandbox Code Playgroud)

它告诉make只需运行一个shell命令。 ./genVer.sh是要运行的脚本的路径(与makefile相同的目录)和名称。无论我指定哪个目标(包括clean,这都是不利因素,但最终对我来说都不是什么大事),这种做法都是可行的。

  • 无论正确的方法应该是什么,这对我来说都是唯一有意义的答案! (2认同)