如何在 Makefile 中直接导出?

How to export directly in a Makefile?

我想直接在我的 Makefile 中导出一些东西,所以我做了一个这样的规则:

export: export LD_LIBRARY_PATH=./smthing/here

然后我在 $(NAME)

中调用此规则
$(NAME): $(OBJS)
        $(CXX) -o $(NAME) $(OBJS) $(CXXFLAGS) $(LDFLAGS)
        $(export)

$(OBJS) 是将我所有的 .cpp 转换为 .o.

的简单规则

$(CXXFLAGS) 是我的编译标志:-Wall -Werror -Wextra

等等 $(LDFLAGS) 你明白了..

这里的问题是我的导出规则已经完成,但它没有导出我期望的内容。为什么 ?你能帮帮我吗?

如果我不在终端中手动导出,我会得到这个:

./cutom_prog: error while loading shared libraries: custom_lib.so: cannot open shared object file: No such file or directory

如果您想处理从 Makefile 的导出,请尝试:

$(NAME): $(OBJS)
        @export MY_ENV_VAR=my_value; \
        $(CXX) -o $(NAME) $(OBJS) $(CXXFLAGS) $(LDFLAGS)

仅当在与命令本身相同的子 shell 中调用时,导出才会起作用。

但是,此解决方案不适用于 LD_LIBRARY_PATH,因为您的意图是从 make 更新父进程,这是不可能的。

解决方法是创建一个包装脚本,它将:

  • 通过调用构建您的应用程序make
  • 设置LD_LIBRARY_PATH
  • 启动您的应用程序