0

所以,我有一个很好用的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 路径。

所以我已经阅读了很多设置/导出变量的方法,但我还没有找到一种方法来做我想做的事情。我认为这可能是不可能的,因为我无法更新调用外壳的变量......但如果有可能我会问这个问题:)

信息更新 我有 gnu make 版本:

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

4

1 回答 1

3

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

于 2018-12-19T00:55:18.417 回答