我想直接在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
答案 0 :(得分:3)
如果要处理从Makefile导出,请尝试:
$(NAME): $(OBJS)
@export MY_ENV_VAR=my_value; \
$(CXX) -o $(NAME) $(OBJS) $(CXXFLAGS) $(LDFLAGS)
导出仅在使用命令本身在相同的子shell中调用时才有效。
但是,此解决方案不适用于LD_LIBRARY_PATH
,因为您的目的是从make
更新父进程,这是不可能的。
解决方法是创建一个包装脚本:
make