gnu makefile linux在调用shell中设置环境变量,可以吗?

时间:2018-12-18 20:24:41

标签: linux makefile gnu

因此,我有一个很棒的makefile。在其中,我设置了一个变量LD_LIBRARY_PATH_VAL来包含可执行文件所需的所有库的所有路径。

现在,为了方便起见,我想要一个通过执行LD_LIBRARY_PATH来设置make set_ld_lib_path环境变量的规则,以便获得以下输出:

> echo $LD_LIBRARY_PATH
>       (empty)
> make set_ld_lib_path
> echo $LD_LIBRARY_PATH
> path/to/lib1:path/to/lib2

这是我目前的规则:

# Set the LD_LIBRARY_PATH needed to find all dependant libs - for convinience
LD_LIBRARY_PATH_VAL := test123
.PHONY: set_ld_lib_path
set_ld_lib_path: export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH_VAL)
set_ld_lib_path:
    @$(ECHO) "$(COLOUR_ACT)LD_LIBRARY_PATH:$(COLOUR_RST) $$LD_LIBRARY_PATH"

注意:我将LD_LIBRARY_PATH_VAL := test123行放在一个完整的示例中,因此我想将LD_LIBRARY_PATH的输出作为test123,但是在我的真实makefile中,这会打印一长串的lib路径。

因此,我已经阅读了很多设置/导出变量的方法,但是在这里我没有找到做我想要的方法。我认为这可能是不可能的,因为我无法更新调用shell的变量...但是如果有可能,我会问一个问题:)

信息更新 我有gnu make版本:

  

为x86_64-pc-linux-gnu构建的GNU Make 4.1版权所有(C)1988-2014   Free Software Foundation,Inc.许可证GPLv3 +:GNU GPL版本3或   以后的http://gnu.org/licenses/gpl.html这是免费软件:您   可以自由更改和重新分发它。没有保修,   法律允许的范围。

1 个答案:

答案 0 :(得分:2)

是的,你不能那样做。 50年来,所有Unix系统的一个基本方面是子进程无法修改其父级环境。 Make可以做很多事情,但不能破坏基本限制。