这是关于这个问题的后续处理:Can I use GNU make's SHELL variable to connect to a remote shell?如何在gnu-make的配方中重置SHELL变量两次?
我想在一个配方中使用两个不同的壳。一个外壳在主机上,另一个在没有制造的目标设备上。 主机上的外壳用于跟踪测试的成功和失败。 目标设备上的外壳用于执行测试。 我已经成功使用$(eval SHELL =)从主机shell更改为目标shell。但是,当我在配方中添加$(eval SHELL =)时,SHELL似乎永远不会改变。我假设在配方运行之前评估两个eval函数,所以第二个扩展取消了第一个扩展。 有没有办法让这些eval函数在运行时间内扩展,或者在单一配方中另外更改SHELL变量两次?
为了说明什么,我瞄准,这将是这样的:
test: test_dependencies
touch $host_files_for_tracking
SHELL = target_shell
$(program_to_test) $(params) -o result
cmp result gold
SHELL = host_shell
rm $host_files_for_tracking
感谢。
注意:当我谈论SHELL时,我指的是make-internal变量,它决定了哪个shell为了执行配方步骤而调用,而不是环境变量。
.PHONY: test test_dependencies
test : test_target test_host
test_host : test_target # to enforce the order
test_target test_host : test_dependencies
shell_orig := $(SHELL)
目标相关的规则看起来像这样:
.PHONY: test_target test_target_touch
test_target: test_target_touch
test_target_touch: SHELL = $(shell_orig)
touch $host_files_for_tracking
test_target: SHELL = target_shell
$(program_to_test) $(params) -o result
和主机
嗨Eldar, 你的建议看起来很有趣。我一定会尝试一下! – nitzanms 2012-07-24 12:04:04