c++ - 如何直接在Makefile中导出?

标签 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

最佳答案

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

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

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

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

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

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

关于c++ - 如何直接在Makefile中导出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30830885/

相关文章:

go - 构建Android时在golang中读取Makefile变量

c++ - 大型 C++ 项目的 Makefile 模板?

c++ - 如果新大小小于或等于旧大小,标准是否保证 std::string::resize 不会重新分配内存?

c++ - 使用函数返回值作为默认模板非类型参数

c++ - 使用 SetupDI API 函数,禁用启用 COM 端口设备驱动程序需要以管理员身份运行

mysql - phpMyAdmin 数据库导出文件大小随每次试验而变化

javascript - 通过 index.js 从文件夹导入

c++ - 如何在 Turbo C++ 中显式调用类的析构函数

variables - Makefile:如何在规则的左侧使用变量?

java - eclipse : Excluding some libraries while extracting others on export to Runnable JAR