我有一个makefile,我想从中调用另一个外部bash脚本来执行构建的另一部分。我最好怎么做呢。
答案 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
。