如何从Makefile设置LD_LIBRARY_PATH env变量?
我有一些链接到共享库的源代码,而共享库又链接到不同的共享库(超过1个).用于构建应用程序的Makefile只知道第一个共享库.
如果我想构建它,我必须指定:(
#export LD_LIBRARY_PATH=/path/to/the/shared/libs对于bash)并且工作正常.
但是,我想从Makefile本身做到这一点.
Jes*_*erE 10
是的,"export"是正确的使用指令.这里详细记录.这与make本身用于将变量传播到子品牌的机制相同.缺点是您无法有选择地将变量传递给某些命令而不传递给其他命令.
我能想到另外两个选择:
.EXPORT_ALL_VARIABLES(在某处指定为目标)会导致所有变量都被导出到子命令的环境中.在命令行上指定:
foo:
EXPORTEDVAR=somevalue gcc $< -o $@
Run Code Online (Sandbox Code Playgroud)小智 9
如果您不想在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
Run Code Online (Sandbox Code Playgroud)
或者设置定义编译器的全局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
Run Code Online (Sandbox Code Playgroud)
我选择gcc作为编译器,但当然你可以使用你喜欢的任何编译器.
小智 5
我遇到了同样的问题,我必须像您一样导出 LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=/path/to/the/shared/libs ; my_command
Run Code Online (Sandbox Code Playgroud)
当 LD_LIBRARY_PATH 仅适用于一个命令时,我的朋友向我展示了另一种选择,请注意下面没有分号。
LD_LIBRARY_PATH=/path/to/the/shared/libs my_command
Run Code Online (Sandbox Code Playgroud)
这篇文章解释了更多。
我曾尝试添加:
export LD_LIBRARY_PATH=/path/to/the/shared/libs
Run Code Online (Sandbox Code Playgroud)
显然效果很好。
我收到错误,因为我的 /path/to/the/shared/libs 不正确。
仍然很高兴知道其他人为此做了什么和/如果有更好的方法。
| 归档时间: |
|
| 查看次数: |
31287 次 |
| 最近记录: |