在 makefile 中运行脚本

nik*_*bey 5 shell scripting makefile

我想在像这样的 makefile 中运行脚本

    all: a b
    a:
        cd ~/trials; \
        . ./sx.sh
    b:
        echo $(bn)
Run Code Online (Sandbox Code Playgroud)

sx.sh 这样做

    export bn=1
Run Code Online (Sandbox Code Playgroud)

发出 make 命令时,我在终端中看不到该变量。我的目标是在针对这些脚本特定设置编译我的项目之前运行脚本。

Bri*_*汤莱恩 4

您不能假设 make 发出的命令全部由 shell 的同一个实例处理。Make 不会打开 shell 并逐一向其提供命令,也不会将命令保存到文件中,然后将其提供给 shell。它通常会为每个命令生成一个 shell,如下所示:

$(SHELL) -c 'cd ~/trials; . ./sx.sh'
Run Code Online (Sandbox Code Playgroud)

这意味着您无法更改环境并让以后的命令继承它。

最好的方法是使用 make 变量来存储您希望传递给命令的详细信息,并在适当的位置使用这些变量。