2015-06-14 14 views
2

我想直接在我的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)你得到了点..

这里的问题是,我的出口规则做,但它并没有出口我所期待的。为什么?你可以帮我吗 ?

我得到这个,如果我不要用手在我的终端执行导出:如果要处理来自Makefile文件导出

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

_“但它没有输出我所期望的” _你能否在你的问题中提供一些关于这个的更多说明? –

+0

好吧,我得到了一个我必须出口的共享文凭。我的二进制文件不会没有这个运行。 – nookonee

+0

请在问题中逐字填写任何错误消息。 '$(NAME)'规则不执行你的二进制BTW。您可能需要在某个安装脚本中添加到该路径。 –

回答

2

,然后尝试:

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

系统只导出如果使用命令本身在相同的子shell中调用,则工作。

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

解决方法是创建一个包装脚本,将:通过调用make

  • 设置LD_LIBRARY_PATH
  • 启动应用程序

    • 构建应用程序
  • +1

    那么..我直到有我的错误消息,出口没有完成.. – nookonee

    +0

    你遇到同样的问题,如果你在调用'make'之前导出?我的意思是:'export LD_LIBRARY_PATH =/your/custom/path;使' –

    +0

    是的,我得到了同样的错误信息,我把我的问题。 – nookonee