如何直接在Makefile中导出?

时间:2015-06-14 15:03:58

标签: c++ makefile export

我想直接在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

1 个答案:

答案 0 :(得分:3)

如果要处理从Makefile导出,请尝试:

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

导出仅在使用命令本身在相同的子shell中调用时才有效。

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

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

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