因此,我有一个很棒的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这是免费软件:您 可以自由更改和重新分发它。没有保修, 法律允许的范围。
答案 0 :(得分:2)
是的,你不能那样做。 50年来,所有Unix系统的一个基本方面是子进程无法修改其父级环境。 Make可以做很多事情,但不能破坏基本限制。