我可以使用 .SHELLFLAGS 变量在 GNU-Make 中选择“bashrc”文件吗?

Sig*_*ius 2 gnu-make

是否可以告诉SHELL,例如 bash,使用特定的 (bash)rc 文件.SHELLFLAGS

您将在下面看到两个示例。第一个显示了我想要做什么,第二个说明了实现预期结果的一种方法。

我问的原因是我有一个 bashrc文件(来自 OpenFOAM)定义了一堆我想在各种配方中使用的变量和函数。

感谢您的时间。


示例(不工作

示例(工作

Mad*_*ist 5

如果您阅读与该--rcfile选项相关的 bash 手册页,您会发现:

   --rcfile file
          Execute  commands  from file instead of the system wide initial?
          ization file /etc/bash.bashrc and the standard personal initial?
          ization  file ~/.bashrc if the shell is interactive (see INVOCA?
          TION below).
Run Code Online (Sandbox Code Playgroud)

特别要注意的是,shell 必须是交互式的才能产生任何效果,但是 make 调用的 shell 当然不是交互式的。

其次,如果您阅读 GNU make 手册,.SHELLFLAGS您会看到默认值为-c(或-ec在 POSIX 模式下);该-c选项允许 shell 读取脚本以从命令行运行,这就是make调用 shell 的方式。这意味着当你.SHELLFLAGS用你自己的值替换时,你必须包含它。

因此,在make运行 shell时,您的 makefile将使用以下命令行:

/bin/bash --rcfile bashrc -- 'echo "${HELLOWORLD}"'
Run Code Online (Sandbox Code Playgroud)

这显然行不通。你需要这样设置.SHELLFLAGS

.SHELLFLAGS = --rcfile bashrc -ic --
Run Code Online (Sandbox Code Playgroud)

-i选项强制交互式 shell,您需要该-c选项来告诉 make 将第一个非选项参数作为命令运行。