相关疑难解决方法(0)

如何检查shell指令的返回值

在我的Makefile中,我需要测试当前目录是否是SVN repo,如果不是,我想在Makefile中使用$(error)指令指出错误.

所以我计划使用$(shell svn info.)的返回值,但我不确定如何从Makefile中获取此值.

注意:我不是试图在配方中获取返回值,而是在Makefile的中间.

现在我正在做这样的事情,这只是因为stdout在出错时是空白的:

SVN_INFO := $(shell svn info . 2> /dev/null)
ifeq ($(SVN_INFO),)
    $(error "Not an SVN repo...")
endif
Run Code Online (Sandbox Code Playgroud)

我仍然想知道是否有可能在Makefile中获取返回值.

shell makefile return-value gnu-make

25
推荐指数
5
解决办法
2万
查看次数

make中的Shell状态代码

我使用Makefile(在Linux下运行GNU make)来重构Python脚本时自动完成我的工作.该脚本创建了一个输出文件,我想确保输出文件在我的重构中保持不变.

但是,我发现无法获取命令的状态代码以影响后续shell if命令.

以下规则说明了问题:

check-cond-codes:
    diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$$!=
    diff -q poalim report2008_4.csv; echo differences: =$$!=
Run Code Online (Sandbox Code Playgroud)

第一个'diff'比较两个相同的文件,第二个比较两个不同的文件.输出是:

diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$!=
no differences: ==
diff -q poalim report2008_4.csv; echo differences: =$!=
Files poalim and report2008_4.csv differ
differences: ==
Run Code Online (Sandbox Code Playgroud)

显然'$$!' 是捕获'diff'状态代码的错误变量.即使在Makefile开头使用SHELL:=/bin/bash也无法解决问题.

返回我需要的值的变量(如果它存在的话)将在真实规则中的'if'命令中使用.

创建一个小的ad-hoc shell脚本代替在Makefile中内联编写所有命令的替代方案是不可取的,但我会将它作为最后的手段使用它.

有关:

shell makefile

18
推荐指数
2
解决办法
3万
查看次数

如果分配给变量的 shell 命令失败,如何使 GNU Make 失败?

我有一个 Make 变量:

PASSWORD:=$(shell vault read -field=password test/password)
Run Code Online (Sandbox Code Playgroud)

如果vault未安装,make将打印make: vault: Command not found,但继续执行配方。如果表达式失败,如何使其失败并停止执行?

makefile gnu-make

5
推荐指数
2
解决办法
1451
查看次数

标签 统计

makefile ×3

gnu-make ×2

shell ×2

return-value ×1