linux - 如何在 linux makefile 中设置环境变量

标签 linux bash makefile

<分区>

我有以下生成文件(片段)

INSTALL_LIB = /usr/local/lib

...

install:
  @echo libs are at $(INSTALL_LIB)
  LD_LIBRARY_PATH=$(INSTALL_LIB)
  @echo libs will be installed at $(LD_LIBRARY_PATH)

但是,make install 将导致:

lib path is /usr/local/lib
LD_LIBRARY_PATH=/usr/local/lib
libs will be installed at 

得到同样的结果

export LD_LIBRARY_PATH=$(INSTALL_LIB)

export LD_LIBRARY_PATH="$(INSTALL_LIB)"

我确信我遗漏了一些关于 make 工作原理的基本知识,但是搜索网络并没有产生任何具体的东西。

更让我困惑的是

LD_LIBRARY_PATH= $(INSTALL_LIB)

结果

/bin/sh: /usr/local/lib: is a directory

LD_LIBRARY_PATH = $(INSTALL_LIB)

结果

/bin/sh: LD_LIBRARY_PATH: command not found

------------编辑----------------

根据建议,我将 makefile 更改为:

INSTALL_LIB = /usr/local/lib

...

install:
  @echo libs are at $(INSTALL_LIB)
  @LD_LIBRARY_PATH=$(INSTALL_LIB);\
  echo libs will be installed at $$LD_LIBRARY_PATH

并且输出如预期的那样:

lib path is /usr/local/lib
libs will be installed at /usr/local/lib

这解决了这个问题。 (但是,我仍然想知道如何使 LD_LIBRARY_PATH 在 makefile 实例之外可用,例如在命令行上)

最佳答案

配方的每一行 都在单独的 shell 中执行,因此该行

LD_LIBRARY_PATH=$(INSTALL_LIB)

仅对运行它的 shell 有效。您要么必须在需要它的 shell 命令中设置 LD_LIBRARY_PATH 的值,但是您需要显示更多的 Makefile 以获取有关如何操作的建议那个。

关于linux - 如何在 linux makefile 中设置环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24702805/

相关文章:

makefile - Makefile 中的多个 Shell 命令

c - 如何编写 Makefile 以从一个源生成两个可执行文件?

linux - 在 bash 中使用多个内核

python - 守护程序 PID 锁定错误

当前在 Linux 中进行线程编程的正确方法

C++ SFML 2.1 未定义对 GLEW 的引用

python - 如何在根 CA 下生成服务器和客户端证书

bash - 阅读docker事件时,如何退出docker事件而不是整个程序?

json - 如何将现有 JSON 文件的内容包装为对象的一部分?

c - 浏览文本文件,用变量的定义/内容替换变量的所有实例