从Makefile设置LD_LIBRARY_PATH

时间:2009-04-24 21:43:50

标签: build-process

如何从Makefile设置LD_LIBRARY_PATH env变量?

我有一些链接到共享库的源代码,而共享库又链接到不同的共享库(超过1个)。用于构建应用程序的Makefile只知道第一个共享库。

如果我想构建它,我必须指定:  #export LD_LIBRARY_PATH=/path/to/the/shared/libs(对于bash) 这很好。

但是,我想从Makefile本身做到这一点。

5 个答案:

答案 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品牌。