在 makefile 中设置环境变量

2024-03-07

我有一个像这样的 makefile:

setup:
  setenv var1 "$(var1)"; \
  setenv var2 "$(var2)";

task1: setup
  source task1.csh

task2: setup
  source task2.csh

我使用以下命令调用 makefile:

make var1=value1 var2=value2 task1

我想要环境变量var1 and var2可见于task1.csh and task2.csh,但除非我将 makefile 更改为:

task1:
  setenv var1 "$(var1)"; \
  setenv var2 "$(var2)"; \
  source task1.csh

task2:
  setenv var1 "$(var1)"; \
  setenv var2 "$(var2)"; \
  source task2.csh

为什么第一种方法不起作用以及如何修复它?


这是行不通的,因为 makefile 规则中的每一行都在其自己的 shell 实例中运行。

来自GNU 制作手册 http://www.gnu.org/software/make/manual/make.html#Execution:

当需要执行配方来更新目标时,将通过为配方的每一行调用一个新的子 shell 来执行它们,除非 .ONESHELL 特殊目标有效(请参阅使用一个 Shell)(在实践中,make 可以采取不影响结果的捷径。)

请注意:这意味着设置 shell 变量和调用 shell 命令(例如设置每个进程本地上下文的 cd)不会影响配方中的以下几行。2 如果要使用 cd 影响下一条语句,请同时放置这两个语句在一个配方行中

因此,您可以按照列出的方式进行操作,或者可以从 make 导出变量,它们已经位于子 shell 的环境中。

export var1 = value1
export var1 = value2

任务1:源任务1.csh

任务2:源任务2.csh

作为旁注,为什么您要采购这些脚本而不是直接运行它们(./task1.sh)?

(我假设你设置SHELL = csh或者在你的 makefile 中加入类似的东西来使这个工作已经完成。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 makefile 中设置环境变量 的相关文章

  • mingw32-make 的目录更改错误

    我正在MinGW32下构建POCO库1 6 0 环境 Windows 7 Ultimate 32位 shell MSYS 执行成功 配置 configure Configured for MinGW config make的内容 POCO
  • 是否可以将 CFLAGS 设置为 Linux 内核模块 Makefile?

    例如 常见设备模块的Makefile obj m jc o default MAKE C lib modules shell uname r build M shell pwd modules clean MAKE C lib module
  • 在 Unix 中,我可以在目录中运行“make”而无需先 cd 到该目录吗?

    在 Unix 中 我可以运行make在没有的目录中cd首先进入该目录 make C path to dir
  • Kubernetes Pod 动态环境变量

    我需要能够将自定义环境变量分配给 Pod 的每个副本 一个变量应该是一些随机的 uuid 另一个唯一的数字 怎么可能实现呢 我更愿意继续使用带有副本的 部署 如果这不是开箱即用的 如何通过自定义复制控制器 控制器管理器来实现 有没有可用的钩
  • 构建 gradle 系统应用程序作为 AOSP 构建的一部分

    我有一个基于 AOSP 的自定义 ROM 并且正在开发一个系统应用程序 该应用程序在 ROM 构建期间打包 就像任何其他系统应用程序一样 是否可以将此应用程序切换为 gradle 样式应用程序 并在 AOSP 构建期间使用 gradle 构
  • bash 函数保留制表符补全

    我把函数 make color make 1 ccze A in bashrc获得彩色的 make 输出 他的作品很好 但是make用于选择目标的制表符补全功能丢失 有什么方法可以保留函数中命令的制表符完成 或者我可以做其他事情来实现制表符
  • 我应该如何配置 log4net 以写入 Windows XP 和 7 上的 %LOCALAPPDATA%?

    我有一个内部应用程序 它使用 log4net 进行日志记录 我希望在以下位置生成日志 LOCALAPPDATA Vendor App application log 不幸的是 log4net 正在创建日志文件 APPDATA 反而 这不是一
  • 我应该在 Heroku 上的哪里存储敏感文件?

    这个问题可能有一个明显的答案 只是我没有想到 我知道敏感数据 例如安全凭证 最好通过 Heroku 的 CLI 使用环境变量存储在 Heroku 等服务上heroku config add 但敏感的怎么办files 比如证书 具体来说 我想
  • 用于发布和调试目标的 Makefile

    我正在尝试构建一个 Makefile 它可以通过指定目标而不是变量 例如make debug 1 不太好 我这里有一个精简的简化示例 它模拟了我想要实现的目标 ifdef debug BINARY my binary debug MODUL
  • makefile 目标中可以有多个 % 符号吗?

    所以我有一个具有如下目标依赖项的 makefile all foreach lang LANGS foreach models MODELS targetName model xml lang targetName 目标如下所示 targe
  • Java环境变量设置方法

    我已将以下行插入 bash profile export GOOGLE APPLICATION CREDENTIALS Users jun Downloads export PATH PATH GOOGLE APPLICATION CRED
  • 如何在使用cmake完成make后打印消息?

    我正在尝试使用 CMake 完成构建过程后打印消息 我只是想在之后通知用户make命令已完成 没有任何错误 我该怎么做 我试过add custom target 但我无法选择何时跑步 另外 我尝试过add custom command 它再
  • 在 Flask 应用程序中设置和检索环境变量

    我想使用 python3 flask 构建一个非常简单的 REST api 比如说我想设置我的SECRET KEY要求由flask作为环境变量 推荐的方法是什么 我知道python dotenv允许 或者我应该说requires the f
  • 将环境变量从 Makefile 导出到用户态环境

    我正在研究如何从 Makefile 环境变量导出以在用户环境中公开 因此应该可以从用户 shell 访问从 Makefile 导出这些变量 我努力了make s export https www gnu org software make
  • 如何在 Go 中将环境变量传递给测试用例

    在为 Go 编写测试用例时 传递需要提供给测试的环境变量的标准方法是什么 例如 我们不想在测试用例的源代码中嵌入密码 处理这个问题最标准的方法是什么 我们让测试用例寻找配置文件吗 还有别的事吗 看来我偶然发现了答案 将其添加到测试用例中可以
  • 为什么总是./configure;制作;进行安装;作为 3 个单独的步骤?

    每次从源代码编译某些内容时 都会经历相同的 3 个步骤 configure make make install 我明白 将安装过程分为不同的步骤是有意义的 但我不明白 为什么这个星球上的每个编码员都必须一次又一次地编写相同的三个命令才能完成
  • 在 Visual Studio 安装程序中使用 Windows 环境变量作为注册表值

    嘿 我想使用 Windows 环境变量作为注册表项的值 不幸的是我不能简单地写一些像 systemroot system32 MyScreensaver scr 正如您所猜测的 我想将一些注册表值指向我自己的应用程序 例如自动启动和屏幕保护
  • MinGW Make 抛出“系统找不到指定的路径。”错误

    我正在尝试在 Windows 7 上使用 cmake 生成一个 c 项目 在实际创建项目之前 cmake 会对您的工具链进行快速测试 我正在使用 MinGW 这就是我的问题所在 Cmake 触发 make 构建 最终失败并返回 系统找不到指
  • 如何在MAMP中设置环境变量?

    如何在 MAMP 版本 3 3 中设置环境变量 我可以在我的 PHP 应用程序中使用它 我已经更新了 Applications MAMP Library bin envvars and envvars std file并添加以下行 Lice
  • 从命令提示符/批处理文件添加环境变量

    我正在尝试在批处理文件中添加环境变量 系统 以下命令显示错误 语法无效 有人可以帮忙吗 对我来说它看起来不错 reg add HKLM SYSTEM CurrentControlSet Control Session Manager Env

随机推荐

  • 调用eachParallel() 时的 Groovy (GPars) 和 MissingMethodException

    当我在控制台中运行以下代码时 groovy 2 1 3 strings butter bread dragon table strings eachParallel println it0 I get groovy lang Missing
  • 无法使用 MapStruct 将属性 String 映射到 JAXBElement

    所以我玩了一下 Mapstruct 阅读了版本 1 1 0 Final 的参考文档 并得出了这一点 隐式类型转换 http mapstruct org documentation stable reference html implicit
  • Python - Sympy 最小值和最大值

    我正在尝试学习 sympy 的微积分函数 并且我能够通过以下方式尽可能获得极值临界点的二阶导数的根 import numpy as np from numpy import linspace math arange linspace fro
  • MVVM、ObservableCollection、异步等

    因此 我正在进入下一阶段的教育 并且已经遇到了与 SQLite 使用相关的一些障碍 这是一个通用应用程序 我当前的重点是该解决方案的 Windows Phone 方面 我的问题在某种程度上独立于 SQLite 但我将使用它作为示例 我正在将
  • 如何展示在线用户

    我正在编写一个简单的聊天 我需要列出在线用户 我不使用devise对于身份验证 有一个自定义user通过验证的模型omniauth user rb class User lt ActiveRecord Base has many messa
  • 验证 Facebook Connect 会话

    我正在编写一个应用程序 它有多个前端客户端 使用 Facebook Connect 作为单点登录解决方案 例如 其中一个客户端在 iOS 平台上运行 因此所有 Facebook 身份验证都通过 iOS Facebook SDK 在客户端上进
  • MySql - 计算多行的时间差

    我有一个包含制造装配数据的表 包括时间戳 我试图确定 作业 开始之间的平均间隔 以分钟为单位 我返回 id 和时间的查询如下所示 select job id job started from JobTable where job start
  • chrome 扩展 - 我如何等待 chrome.runtime 函数?

    我在后台的操作是访问该站点并从那里获取信息 问题是代码在收到信息之前继续运行 附上显示问题的代码 背景 js chrome runtime onMessage addListener function request sender send
  • 将警告视为 TFS 级别 VS2017 上的错误

    我已经为此苦苦挣扎了一段时间 我搜索并尝试了不同的方法 但它不起作用 所以我将其发布在这里 我想在 TFS 级别构建时将警告视为错误 但此选项不起作用 我已经按照其他帖子上的建议完成了 我已经尝试过 p TreatWarningsAsErr
  • 如何使用 Excel VBA 将项目添加到 Sharepoint 列表?

    我有一个基于 Excel 的应用程序 它收集一些用户输入 并根据该用户输入进行一些计算 应用程序本身不存储任何用户输入或计算 目前 每当用户运行该应用程序时 它都会将数据发送到 Access 数据库并向 Access 表中插入一行xlTab
  • 每行读取行的最快方法是什么

    我有一个巨大的字符串文件 所有行都应添加到我的代码中的列表中 最快的方法是什么 我发现this https stackoverflow com questions 9093888 fastest way of reading relativ
  • C++ 流混淆:istreambuf_iterator 与 istream_iterator?

    有什么区别istreambuf iterator and istream iterator 一般来说 流和streambufs之间有什么区别 我真的找不到任何明确的解释 所以决定在这里询问 IOstreams 使用streambufs 作为
  • 使用 SQL 从 XML 中删除具有特定值的节点

    我正在尝试解析一段 XML 并删除包含某些值的节点 如果值准确 我知道如何删除它们 但我想使用 包含 之类的东西 这可以准确删除 update XML set data modify delete Message text customer
  • 如何返回异步 IEnumerable

    我有以下方法 public async IEnumerable
  • 如果java spring cors策略被阻止,如何访问后端? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我使用 Java spring 作为后端 当前端到达我的端点时 他会收到错误 从源 http localhost 300
  • 如何扁平化查询结果?

    用一个例子让大家很容易理解 https developer github com v4 explorer https developer github com v4 explorer 查询观众信息 query viewer follower
  • 材质 UI 选择设置值始终超出范围

    我有一个 MaterialUI Select 代码 并且我正在动态处理 value 参数 我的问题是 当我设置任何值时 它总是说它超出范围 甚至在有效值中显示该值 SelectInput js 291 Material UI you hav
  • 投放到某个事件(而不是日历) - 如何识别事件?

    我已经成功实现了将 jquery ui 元素拖动到我的 fullCalendar 上 问题是 我想要放置的不是日历本身 而是日历上显示的特定事件 以便将放置的项目添加到该事件中 缺少的部分是如何识别当我放下鼠标时发生的事件 drop fun
  • 如何将控制台输出写入文本文件

    我是编程新手 我在网页上搜索了这个问题的答案 并尝试了很多可能性 但没有成功 我目前已成功将电位计连接到我的树莓派并在控制台上获取值 但我不知道如何将这些值保存到文本文件中 这是我的代码 usr bin python import spid
  • 在 makefile 中设置环境变量

    我有一个像这样的 makefile setup setenv var1 var1 setenv var2 var2 task1 setup source task1 csh task2 setup source task2 csh 我使用以