如何从Makefile设置LD_LIBRARY_PATH env变量?
我有一些链接到共享库的源代码,而共享库又链接到不同的共享库(超过1个)。用于构建应用程序的Makefile只知道第一个共享库。
如果我想构建它,我必须指定:
#export LD_LIBRARY_PATH=/path/to/the/shared/libs
(对于bash)
这很好。
但是,我想从Makefile本身做到这一点。
答案 0 :(得分:9)
是的,“export”是正确的使用指令。详细记录了here。这与make本身用于将变量传播到子品牌的机制相同。缺点是你不能有选择地将变量传递给某些命令而不是其他命令。
我还能想到另外两个选择:
.EXPORT_ALL_VARIABLES
(在某处指定为目标),会将所有变量导出到子命令的环境中。在命令行中指定:
foo:
EXPORTEDVAR=somevalue gcc $< -o $@
答案 1 :(得分:7)
如果您不想在makefile中导出LD_LIBRARY_PATH变量(例如,因为您有所有添加到变量的递归Makefile),您可以将它绑定到对编译器和链接器的所有调用。
您可以将其直接添加到目标规则中的所有gcc和ld调用中,例如
my_target: my_target.o
LD_LIBRARY_PATH=/my/library/path gcc -o my_target my_target.o
或者设置定义编译器的全局make变量包括路径,例如:
CC=LD_LIBRARY_PATH=/my/library/path gcc
CPP=LD_LIBRARY_PATH=/my/library/path gcc
CXX=LD_LIBRARY_PATH=/my/library/path gcc
我选择gcc作为编译器,但当然你可以使用你喜欢的任何编译器。
答案 2 :(得分:3)
我遇到了同样的问题,我必须像你一样导出LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=/path/to/the/shared/libs ; my_command
当LD_LIBRARY_PATH仅适用于一个命令时,我的朋友向我展示了另一种选择,请注意下面没有分号。
LD_LIBRARY_PATH=/path/to/the/shared/libs my_command
这article解释了更多。
答案 3 :(得分:2)
我曾尝试添加:
export LD_LIBRARY_PATH=/path/to/the/shared/libs
显然工作正常。
我收到错误是因为我的/ path / to / the / shared / libs不正确。
知道其他人为此做了什么以及/如果有更好的方法,仍然会很好。
答案 4 :(得分:0)
如果要为特定品牌设置LD_LIBRARY_PATH,请尝试使用此LD_LIBRARY_PATH = / path / to / the / shared / libs品牌。