如何在 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
- 启动您的应用程序
我想直接在我的 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
- 启动您的应用程序